質問

Javaでクラスを開発したいです。問題は、コンストラクターが機能しないことです

クラスはこれです:

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

//Map
private EnumSet<E> map;

//Constructor
public EnumSetPlus(){

}

マップをInicializateしたいです EnumSet.noneOf(E.class) しかし、コンストラクターにエラーが発生します。

コンストラクターは間違っていますか?コンストラクターなしで変数マップを初期化できますか?

私が試してみました public EnumSetPlus<<E extends Enum<E>>> = EnumSet.noneOf(E) 変数コンテキストでは、機能しません。

私が試してみました map = EnumSet.noneOf(E.class) コンストラクターにもなりますが、どちらも機能しません。

構文や方法の問題だと思います

私たちを手伝ってくれますか?

事前にありがとう!

役に立ちましたか?

解決

問題は、のクラスインスタンスが必要だということです E 使用するだけではできません E また E.class. 。 aを試してください Class<E> コンストラクターパラメーターとして、クラスにパラメーター化されているクラスをクラスに伝えるため。

これは機能するはずです:

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

問題は、コンパイラがタイプEが実際に何であるか(どの列挙であるか)がわからないため、コンパイル時にクラスを解決できないことです。その情報を実行時に利用可能にする必要があります。 EnumSetPlus 具体的なタイプのパラメーターとともに、反射を使用して決定できます。その単純なケースでは、反射アプローチはやり過ぎになるので、パラメーターアプローチを試すことをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top