Java方法返回实现接口的枚举

时间:2012-09-21 10:33:33

标签: java generics

如何指定Java方法返回实现接口的枚举? 给出了这种方法:

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

我想做:

someMethod(anotherMethod());

anotherMethod的签名应该是什么?

3 个答案:

答案 0 :(得分:3)

如果someMethod需要Class<T>参数,T extends Enum<T> & SomeInterface,那么您需要从anotherMethod返回。由于您在所需电话中的括号中没有任何内容,我只想说:

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

答案 1 :(得分:3)

正确实施应

<T extends Enum<? extends T> & SomeInterface> void someMethod(Class<T> type);

<T extends Enum<? extends T> & SomeInterface>  Class<T>  anotherMethod();

请检查More Fun with Wildcards

或更简单的版本

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

答案 2 :(得分:1)

anotherMethod只需要返回一个Class,它可能是你想到的扩展你的枚举和界面的完全类,或者只是一个通配符Class<?>(尽管你会有编译时间警告)。如果您想避免出现警告,则返回类型必须为Class<T>,其泛型定义为T,与您正在调用的方法一样。