Domanda

Voglio sviluppare una classe in Java. Il problema è che il costruttore non funziona

La classe è questa:

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

//Map
private EnumSet<E> map;

//Constructor
public EnumSetPlus(){

}

Voglio inicializate la mappa con EnumSet.noneOf(E.class) ma il costruttore dà un errore.

È il torto costruttore ?. Posso inizializzare la mappa variabile senza un costruttore ?.

Ho provato public EnumSetPlus<<E extends Enum<E>>> = EnumSet.noneOf(E) nel contesto variabile, ma non funziona.

Ho provato map = EnumSet.noneOf(E.class) al costruttore troppo, ma nessuno dei due funziona.

Credo che sia un problema con la sintassi o con il metodo

potrebbe aiutarmi?

Grazie in anticipo!

È stato utile?

Soluzione

Il problema è che hai bisogno di un'istanza della classe di E che non può essere fatto con solo utilizzando E o E.class. Cercare di fornire un Class<E> come parametro del costruttore, al fine di spiegare alla classe quale classe enum è parametrizzato per.

Questo dovrebbe funzionare:

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

Il problema è che il compilatore non sa di che tipo E in realtà è (che Enum è), quindi non in grado di risolvere la classe al momento della compilazione. Hai bisogno di fare che le informazioni disponibili in fase di esecuzione, sia con il parametro come suggerito o sottoclasse EnumSetPlus insieme ad un parametro di tipo concreto che poi può essere determinato utilizzando la riflessione. Dal momento che l'approccio di riflessione sarebbe eccessivo in questo caso semplice, io suggerirei di provare l'approccio parametro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top