Java メソッドがインターフェイスを実装する列挙型を返すように指定するにはどうすればよいですか? この方法は次のとおりです。
public <T extends Enum<T> & SomeInterface> void someMethod(Class<T> type) {
}
そして、私はやりたい:
someMethod(anotherMethod());
の署名はanotherMethod
何ですか?
正しい実装は
<T extends Enum<? extends T> & SomeInterface> void someMethod(Class<T> type);
<T extends Enum<? extends T> & SomeInterface> Class<T> anotherMethod();
ワイルドカードでもっと楽しく
またはよりシンプルなバージョン
public class Example<T extends Enum<T> & SomeInterface> {
public void someMethod(Class<T> type) {}
public Class<T> anotherMethod() {}
}
がパラメータ whereをsomeMethod
期待する場合、それは から返す必要があるものです。そして、希望する呼び出しの括弧内に何もないので、私は簡単に言います:Class<T>
T extends Enum<T> & SomeInterface
anotherMethod
public Class<T extends Enum<T> & SomeInterface> anotherMethod()
anotherMethod
を返す必要がClass
あります。列挙型とインターフェイスを拡張するのは、念頭に置いている正確なクラスの場合もあれば、ワイルドカードのClass<?>
場合もあります(コンパイル時の警告が表示されます)。警告を回避したい場合は、戻り型は、呼び出しているメソッドClass<T>
のようにジェネリックス定義を使用する必要があります。T