Pregunta

Quiero desarrollar una clase en Java. El problema es que el constructor no funciona

La clase es esta:

public class EnumSetPlus<E extends Enum<E>> { 

//Map
private EnumSet<E> map;

//Constructor
public EnumSetPlus(){

}

Quiero inicializar el mapa con EnumSet.noneOf(E.class) Pero el constructor da un error.

¿Está mal el constructor?. ¿Puedo inicializar el mapa variable sin un constructor?

Yo he tratado public EnumSetPlus<<E extends Enum<E>>> = EnumSet.noneOf(E) En el contexto variable, pero no funciona.

Yo he tratado map = EnumSet.noneOf(E.class) en el constructor también, pero tampoco funciona.

Creo que es un problema con la sintaxis o con el método

¿usted me podría ayudar?

¡Gracias de antemano!

¿Fue útil?

Solución

El problema es que necesita una instancia de clase de E que no se puede hacer con solo usar E o E.class. Intenta proporcionar un Class<E> Como parámetro de constructor, para decirle a la clase para qué clase enum es parametrizada.

Esto debería funcionar:

public EnumSetPlus(Class<E> clazz){
  map = EnumSet.noneOf(clazz);
}

El problema es que el compilador no sabe qué es realmente el tipo E (qué enum es), por lo que no puede resolver la clase en el momento de la compilación. Debe hacer que esa información esté disponible en tiempo de ejecución, ya sea con el parámetro sugerido o subclasificando EnumSetPlus junto con un parámetro de tipo de concreto que luego se puede determinar usando la reflexión. Dado que el enfoque de reflexión sería exagerado en ese simple caso, sugeriría probar el enfoque de parámetros.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top