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

如果someMethod需要一个Class<T>参数 where T extends Enum<T> & SomeInterface,那么这就是您需要从anotherMethod. 而且由于您在所需调用的括号中没有任何内容,我会简单地说:

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

于 2012-09-21T10:37:09.467 回答
1

anotherMethod只需要返回 a Class,它可能是您想到的扩展枚举和接口的确切类,或者只是一个通配符Class<?>(尽管您会有编译时警告)。如果您想避免警告,则返回类型需要使用您调用的方法中Class<T>的泛型定义。T

于 2012-09-21T10:45:32.693 回答