4

Java メソッドがインターフェイスを実装する列挙型を返すように指定するにはどうすればよいですか? この方法は次のとおりです。

public <T extends Enum<T> & SomeInterface> void someMethod(Class<T> type) {
}

そして、私はやりたい:

someMethod(anotherMethod());

の署名はanotherMethod何ですか?

4

3 に答える 3

3

正しい実装は

<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() {}
}
于 2012-09-21T11:11:25.680 に答える
3

がパラメータ whereをsomeMethod期待する場合、それは から返す必要があるものです。そして、希望する呼び出しの括弧内に何もないので、私は簡単に言います:Class<T>T extends Enum<T> & SomeInterfaceanotherMethod

public Class<T extends Enum<T> & SomeInterface> anotherMethod()

于 2012-09-21T10:37:09.467 に答える
1

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

于 2012-09-21T10:45:32.693 に答える