Frage

Ich möchte eine Klasse in Java entwickeln. Das Problem ist, dass der Konstruktor nicht funktioniert

Die Klasse lautet:

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

//Map
private EnumSet<E> map;

//Constructor
public EnumSetPlus(){

}

Ich möchte die Karte mit inicialisieren EnumSet.noneOf(E.class) Aber der Konstruktor gibt einen Fehler an.

Ist der Konstruktor falsch? Kann ich die variable Karte ohne Konstruktor initialisieren?

Ich habe versucht public EnumSetPlus<<E extends Enum<E>>> = EnumSet.noneOf(E) Im variablen Kontext, aber es funktioniert nicht.

Ich habe versucht map = EnumSet.noneOf(E.class) Auch in den Konstruktor, aber es funktioniert auch nicht.

Ich denke, es ist ein Problem mit der Syntax oder mit der Methode

kannst du mir helfen?

Danke vorher!

War es hilfreich?

Lösung

Das Problem ist, dass Sie eine Klasseninstanz von benötigen E was nicht mit einfach nur verwendet werden kann E oder E.class. Versuchen Sie, eine zu liefern Class<E> Als Konstruktorparameter, um die Klasse zu mitteilen, für die sie die Klasse aufnimmt, ist sie parametrisiert.

Das sollte funktionieren:

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

Das Problem ist, dass der Compiler nicht weiß, welcher Typ E tatsächlich ist (welcher Ausgang er ist), daher kann er die Klasse zum Kompilierzeit nicht beheben. Sie müssen diese Informationen zur Laufzeit zur Verfügung stellen, entweder mit dem vorgeschlagenen Parameter oder durch Unterklasse EnumSetPlus zusammen mit einem konkreten Typparameter, der dann unter Verwendung von Reflexion bestimmt werden kann. Da der Reflexionsansatz in diesem einfachen Fall übertrieben wäre, würde ich vorschlagen, den Parameteransatz auszuprobieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top