E' un problema che si risolve con un corretto utilizzo della ereditarietà e del polimorfismo.
Da un oggetto Object, di cui non conosci la classe originaria, più che usare l'operatore instanceof non puoi fare... e risulta parecchio scomodo (come puoi vedere dall'esempio nel post precedente).
Ma se usi correttamente l'ereditarietà ed il polimorfismo ti accorgerai facilmente che puoi definire una classe generica (chiamata, ad esempio, "Oggetto") che fornisca dei metodi generici (dichiarati abstract) ed una serie di classi specifiche (Cerchio, Triangolo, Quadrato, CheSoIo) che implementano concretamente quei metodi... a questo punto risolvi la questione alla base, con raffinatezza:
codice:
public abstract class Oggetto {
public abstract void metodo1();
public abstract void metodo2();
}
public class Cerchio extends Oggetto {
...
public void metodo1() { /* implementazione concreta */ }
public void metodo2() { /* implementazione concreta */ }
}
public class Triangolo extends Oggetto {
...
public void metodo1() { /* implementazione concreta */ }
public void metodo2() { /* implementazione concreta */ }
}
...
Quindi:
codice:
public class Componente {
private Oggetto obj;
public Componente(Cerchio c) { obj = c; }
public void usaComponente() {
obj.metodo1();
obj.metodo2();
}
}
Ciao.