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> & SomeInterfaceanotherMethod
public Class<T extends Enum<T> & SomeInterface> anotherMethod()
anotherMethodを返す必要がClassあります。列挙型とインターフェイスを拡張するのは、念頭に置いている正確なクラスの場合もあれば、ワイルドカードのClass<?>場合もあります(コンパイル時の警告が表示されます)。警告を回避したい場合は、戻り型は、呼び出しているメソッドClass<T>のようにジェネリックス定義を使用する必要があります。T