tengo una clase que representa un par de dos valores del mismo tipo (tipo que puede ser cualquiera de un conjunto específico de tipos):Limitaciones de Java Generics o uso incorrecto?
public class Pair<E extends AClass>{
private E var1;
private E var2;
}
Esta clase se utiliza por un marco, por lo que necesita un no constructor -argumento en el que tengo de ejecutar el 2 variables (Q1, var2):
public class Pair<E extends AClass>{
private E var1;
private E var2;
public Pair(){
var1 = invoke constructor of type E;
var2 = invoke constructor of type E
}
}
obviamente, hay una serie de problemas aquí:
en Para instanciar las variables, de alguna manera debería saber su tipo exacto e invocar el constructor de ese tipo específico; en el mejor de los casos esto significa tener una muy grande si else en el constructor, algo así como:
public Pair(){ if(var1 instanceof SpecificType1){ var1 = new SpecificType1(); var2 = new SpecificType2(); } }
Incluso si hago que el anterior, voy a tener algunos problemas debido a var1 se declara de tipo E y yo obtendrá un error de desajuste de tipo al intentar crear una instancia de SpecficType1 y asignar el objeto resultante a var1/var2. Con el fin de hacer que funcione, tengo que echar a E:
var1 = (E)new SpecificType1();
Pero esto destruye el tipo de tiempo de compilación como yo estoy tratando de lanzar un tipo específico de un tipo genérico.
¿Es esta una limitación de los genéricos en java o es este escenario malo para usar genéricos?
Si tiene que usar 'instanceOf' dentro de un contenedor genérico, entonces tiene un problema de diseño. –
Puedes probar [Class.forName()] (http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#forName%28java.lang.String%29) –
Notificación al asker (ya que las ediciones no notifican al asker): Agregué un ejemplo de código simple sobre cómo usar el patrón de diseño de fábrica en su caso – amit