私は、IDEAはvalueOf
関数内でエラーWrong 1st argument type. Found: 'java.lang.Class<T>', required: 'java.lang.Class<T>'
を報告し、次のコードEnumを拡張しないジェネリックのEnum.valueOfの代わりに?
protected <T> T func(Class<T> c) {
if (c.isEnum()) {
try {
return c.cast(Enum.valueOf(c, "string"));
} catch (IllegalArgumentException e) {
return null;
}
}
return null;
}
を持っています。関数のヘッダーに<T extends Enum<T>>
を指定することでこのエラーを避けることができますが、考えられるのはT
はenumだけでなく幅広い種類にすることができるということです。 T
を制限せずにコンパイル/実行するコードを取得することは可能ですか?
'valueOf()'の最初の引数は列挙型でなければなりません....達成しようとしている動作は何ですか? 'valueOf()'は、非enumの最初の引数に対して何を返しますか?私はこれが[XY問題](http://xyproblem.info)だと思う。 –
@JimGarrison 'valueOf'は、cがenumクラスでないか、その名前の定数を持たない場合にIllegalArgumentExceptionを投げる。したがって、 'func'はnullを返します。私は、このような方法が何のために使われているのか知ることは面白いと思っています。 –
私が理解できないのは、コンパイル時の型安全性を逆転させて実行時に再適用するということです。何のために? @ジム・ギャリソン。 –