View Single Post
Old 07-06-2009, 20:30   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Confesso candidamente di essermi perso per strada verso i due quinti del post. Provo con una "dritta", buttata un po' lì a tentoni.

Se è vero che Vector piglia e restituisce Object è vero anche che CollezioneDiOggettiMisurabili non è costretta a prendere e dare Object: può benissimo ricevere e restituire dei Misurabile.

Cioè se questo è l'unico punto in cui qualcosa è inserito in collezione:

Codice:
public void inserisci(Misurabile m) {
    collezione.add(m);
}
necessariamente vale la condizione "gli elementi di collezione sono di tipo Misurabile". E se vale questa condizione allora vale anche:

Codice:
public Misurabile get(int index) {
    Object value = collezione.get(index);
    Misurabile m = (Misurabile)value;
    return m;
}
Verso l'esterno il contratto di una classe in cui esiste il solo metodo inserici per aggiungere elementi a collezione esiste un invariante di rappresentazione degli elementi di collezione stessa (Misurabile). La presenza di questo "fatto necessariamente vero" rende necessariamente valida la conversione esplicita Misurabile x = (Misurabile)collezione.get(qualcosa). Vector.get restituisce un Object ma se io so che in quel vector ci metto solo dei Misurabile allora non può non valere la conseguenza che tutto ciò che tiro fuori da quel vector sia un Misurabile.

Spero che questo possa esserti utile. A prescindere da questo la riflessione non mi sembra entrare in gioco (se non limitatamente ad una verifica del tipo di "value" da farsi con instanceof ma, ripeto, che sia un Misurabile appare scontato).
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso