Supongamos que tengo estas interfaces:parámetro Usando que implementa múltiples interfaces de pre-genéricos
public interface I1 {
void foo();
}
public interface I2 {
void bar();
}
y las clases:
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
}
Ahora, con los genéricos puedo tener un método como:
public <T extends I1 & I2> void method(T param) {
param.foo();
param.bar();
}
y puedo llamarlo con A y B como parámetros, pero no con C (no implementa I2).
¿Hubo alguna forma de lograr este tipo de seguridad de tipo genérico pre (java < 1.5).
Considere que A, B y C tienen diferentes árboles de herencia, y no es realmente una opción hacer algo como AParent y BParent que tienen un padre común.
Yo sabía que se podía hacer:
public void method(I1 param) {
param.foo();
((I2)param).bar();
}
pero entonces también se podría llamar method(new C())
la que no implementa I2, por lo que se meten en problemas.
¿Hay alguna otra forma en que podría haber hecho esto?
P.S. : Realmente no necesito hacer esto, es principalmente por curiosidad lo que pido.
en cierto modo me dio cuenta de esto después hice la pregunta, aunque si tiene más de dos interfaces, y usted quiere mezclar y combinar los diferentes métodos, puede convertirse un dolor al crear una interfaz infantil para cada combinación que desee usar. Estaba pensando más en tener un método como 'method (I1 & I2 param)' o alguna otra forma de decir que el parámetro implementa múltiples interfaces sobre la marcha (sin crear una nueva clase/interfaz) –
No creo esto es bueno en el punto de vista del diseño. Por favor mira mi respuesta. – hqt