Question

Je veux développer une classe en java. Le problème est que le constructeur ne fonctionne pas

La classe est la suivante:

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

//Map
private EnumSet<E> map;

//Constructor
public EnumSetPlus(){

}

Je veux inicializate la carte avec EnumSet.noneOf(E.class) mais le constructeur donne une erreur.

est le mauvais constructeur ?. Puis-je initialiser la carte variable sans un constructeur ?.

J'ai essayé public EnumSetPlus<<E extends Enum<E>>> = EnumSet.noneOf(E) dans le contexte variables, mais il ne fonctionne pas.

J'ai essayé map = EnumSet.noneOf(E.class) dans le constructeur aussi, mais ni il fonctionne.

Je pense qu'il est un problème avec la syntaxe ou la méthode

Pourriez-vous me aider?

Merci d'avance!

Était-ce utile?

La solution

Le problème est que vous avez besoin d'une instance de classe de E qui ne peut être fait avec juste en utilisant E ou E.class. Essayez de fournir un Class<E> comme paramètre constructeur, afin de dire à la classe qui classe ENUM il est paramétré pour.

Cela devrait fonctionner:

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

Le problème est que le compilateur ne sait pas de quel type E est en réalité (ce qui ENUM est), il ne peut donc pas résoudre la classe au moment de la compilation. Vous devez rendre ces informations disponibles lors de l'exécution, soit avec le paramètre comme suggéré ou par le sous-classement EnumSetPlus avec un paramètre de type de béton qui peut ensuite être déterminée en utilisant la réflexion. Étant donné que l'approche de réflexion serait exagéré dans ce cas simple, je vous suggère d'essayer l'approche des paramètres.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top