ジェネリックとenumを使用してコードを設計しようとしています。私はプリミティブな整数を使用して列挙型を取得したいだけでなく、文字列を保持する必要があります。私は多くの列挙型を持っているので、public toString()
、getIndex()
、およびgetEnum()
のメソッドをオーバーライドすることを忘れないようにインターフェイスで実装しました。しかし、タイプセーフティ警告、どのようにそれを取り除くためのアイデア、そしてなぜそれが起こっているのかを知っていますか?Java EnumとGenericsの組み合わせ
public interface EnumInf{
public String toString();
public int getIndex();
public <T> T getEnum(int index);
}
public enum ENUM_A implements EnumInf{
E_ZERO(0, "zero"),
E_ONE(1, "one"),
E_TWO(2, "two");
private int index;
private String name;
private ENUM_A(int _index, String _name){
this.index = _index;
this.name = _name;
}
public int getIndex(){
return index;
}
public String toString(){
return name;
}
// warning on the return type:
// Type safety:The return type ENUM_A for getEnum(int) from the type ENUM_A needs unchecked conversion to conform to T from the type EnumInf
public ENUM_A getEnum(int index){
return values()[index];
}
FYI、インターフェースは無用であるに '' toString()を宣言します。すべての 'オブジェクト'はすでにそれを宣言しています。実装するクラスでオーバーライドするだけで済みます。 – ajb