Enumsetを使用した汎用クラスのコンストラクターの問題
-
26-10-2019 - |
質問
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
具体的なタイプのパラメーターとともに、反射を使用して決定できます。その単純なケースでは、反射アプローチはやり過ぎになるので、パラメーターアプローチを試すことをお勧めします。
所属していません StackOverflow