interface A{ void a(); }
interface B{ void b(); }
puedo hava un método genérico de esta manera:
class C {
<T extends A & B> void c(T t) {
t.a();
t.b();
}
}
pero no puedo hava una colección genérica como esto:
class D{
List<? extends A & B> l;
}
que sé que podría hacer una interfaz E vacía que amplíe tanto A como B, y que tenga una Lista que contenga E ... pero preferiría dejar mis clases marcadas con solo A y B, y no tener que tener una E. Esto es aún más problemático cuando hay muchas más A y B que se pueden combinar de 2 maneras.
Prefiero ser capaz de definir un tipo sobre la marcha, como una unión de interfaces, y hacer que las colecciones reconozcan objetos que implementan todas las interfaces como instancias de ese tipo.
¿Hay alguna manera de hacer esto en Java? Estoy abierto a cualquier tipo de trabajo o pirateo en este punto para evitar crear una nueva interfaz y etiquetar mis clases con ella, solo para que puedan vivir juntas en una colección. O, si alguien puede aclararme por qué esto es imposible, eso sería igualmente apreciado.
Te refieres a * intersección * de interfaces, ¿no es así? – Saintali
Estoy bastante seguro de que me refiero a una unión de interfaces. Probablemente estés pensando en cómo hay un conjunto de clases diferentes (afortunadamente no disjuntas) que implementan cada interfaz. Entonces, el conjunto de clases que implementa la unión de las interfaces es la intersección de los conjuntos descritos anteriormente. –