interface A{ void a(); }
interface B{ void b(); }
posso Hava un metodo generico come questo:
class C {
<T extends A & B> void c(T t) {
t.a();
t.b();
}
}
ma non posso Hava una raccolta generica come questa:
class D{
List<? extends A & B> l;
}
lo so che potrei creare un'interfaccia vuota E che estenda sia A che B, e abbia una lista che contiene E ... ma preferirei lasciare le mie classi segnate solo con A e B, e non avere un E. T il suo è ancora più problematico quando ci sono molti altri A e B che possono essere combinati in 2^modi.
Preferirei essere in grado di definire un tipo al volo, come unione di interfacce, e fare in modo che le collezioni riconoscano gli oggetti che implementano tutte le interfacce come istanze di quel tipo.
C'è un modo per farlo in Java? Sono aperto a qualsiasi tipo di lavoro o hackeraggio a questo punto per evitare di creare una nuova interfaccia e taggare le mie classi con esso, così che possano vivere insieme in una raccolta. Oppure, se qualcuno potesse chiarire per me perché questo è impossibile, sarebbe ugualmente apprezzato.
Intendi e * l'intersezione * di interfacce, non è vero? – Saintali
Sono quasi certo che intendo un'unione di interfacce. Probabilmente stai pensando a come ci sia un diverso insieme di classi (che si spera non disgiunte) che implementano ciascuna interfaccia. Quindi l'insieme di classi che implementa l'unione delle interfacce è l'intersezione degli insiemi sopra descritti. –