|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Jun 2009
Città: Roma
Messaggi: 102
|
[JAVA] Supertipi e sottotipi, posso fare questa cosa?
Ciao,
allora la situazione è questa, ho un'interface che mi definisce dati di tipo Misurabile che come unica caratteristica comune hanno la capacità di restituire la loro misura: Codice:
/** OVERVIEW: Si tratta di un'interface che descrive la caratteristica comune ad una serie di tipi che la implementeranno:
ovvero la capacità di restituire al chiamante la propria misura */
public interface Misurabile{
double misura(); // Ogni elemento di tipo Misurabile deve essere capace di misurarsi
}
Poi ho una classe chiamata Processo che contiene un metodo inserisci che inserisce un QUALSIASI oggetto Misurabile dentro un buffer rappresentato da un Vector: Codice:
public class Processo{
/* Il buffer condiviso dai vari processi viene rappresnentato mediante un Vector definito come variabile di classe */
private static Vector buffer;
static boolean statoBuffer = false; /* TRUE: il buffer è stato creato; FALSE: il buffer non è stato creato
/** EFFECTS: Si tratta di un metodo di classe che crea il buffer (rendendo possibile le operazioni dei processi su di
esso) e setta a TRUE la variabile statoBuffer. Tale metodo è comune a tutti i tipi di processi e viene
implementato nella classe abstract */
public static void creaBuffer(){
if(statoBuffer = false){ // Se il buffer non è stato ancora creato
buffer = new Vector(); // Crea il nuovo buffer
statoBuffer = true; // Setta a true statoBuffer per avvertire i processi che il buffer è creato e pronto all'uso
}
/** EFFETCT: Inserisce un qualsiasi oggetto di tipo Misurabile nel buffer se il buffer è stato correttamente creato,
altrimenti solleva un'eccezione
@param: il riferimento ad un oggetto Misurabile */
public void inserisci(Misurabile m){
if(statoBuffer = false) throw new FailureException(); // Se il buffer non è stato creato solleva un'eccezione
else buffer.addElement(m); // Altrimenti aggiungi l'oggetto referenziato da m alla fine del buffer
}
}
Si può fare? Grazie |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#3 | |
|
Bannato
Iscritto dal: Jun 2009
Città: Roma
Messaggi: 102
|
Quote:
Tnx |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Per fare le cose in maniera un po' più type safe, potresti fare uso dei Generics; in particolare rendere il tuo buffer generalizzabile facendo in modo che il client debba specificare il tipo di elementi inseribili nel buffer. Esempio: supponiamo che buffer sia una lista implementa dalla classe ArrayList. Usiamo i Generics per specificare che gli elementi inseribili sono solo quelli che implementano l'interfaccia Misurabile: Codice:
// dichiarazione List<Misurabile> buffer; // inizializzazione buffer = new ArrayList<Misurabile>(); Quindi hai una maggiore type safety perchè il problema si manifesta già a compile-time, mentre prima accadeva solo a run-time.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:25.




















