Supponiamo che io sono queste interfacce:Usando il parametro che implementa più interfacce pre-generici
public interface I1 {
void foo();
}
public interface I2 {
void bar();
}
e le classi:
public class A extends AParent implements I1, I2 {
// code for foo and bar methods here
}
public class B extends BParent implements I1, I2 {
// code for foo and bar methods here
}
public class C extends CParent implements I1 {
// code for foo method here
}
Ora, con i generici posso avere un metodo come:
public <T extends I1 & I2> void method(T param) {
param.foo();
param.bar();
}
e posso chiamarlo sia con A che con B come parametri, ma non con C (non implementa I2).
Esiste un modo per ottenere questo tipo di pre generici di sicurezza (java < 1.5).
Si consideri che A, B e C hanno alberi di ereditarietà diversi e non è davvero un'opzione per fare qualcosa come AParent e BParent che hanno un genitore comune loro stessi.
So che si possa fare:
public void method(I1 param) {
param.foo();
((I2)param).bar();
}
ma allora si potrebbe anche chiamare method(new C())
che non implementa I2, in modo da ottenere nei guai.
Quindi ci sono altri modi in cui potreste averlo fatto?
P.S. : Non ho davvero bisogno di farlo, è soprattutto per curiosità che chiedo.
I sorta di realizzato questo dopo ho fatto la domanda, anche se si dispone di più di due interfacce, e si desidera combinare quelli per metodi diversi, può diventare un dolore che crea un'interfaccia child per ogni combinazione che si desidera utilizzare. Stavo pensando più ad un metodo come 'method (I1 & I2 param)' o qualche altro modo per dire che il parametro implementa più interfacce in movimento (senza creare una nuova classe/interfaccia) –
Non penso questo è un buon punto di vista del design. Per favore vedi la mia risposta. – hqt