以下名为
reverse
的方法,将如何重写为允许任何枚举类型的通用方法?public class TestX {
enum Gender { male, female }
public static void main(String[] args) {
System.out.printf("%s\n", TestX.reverse("male").name());
System.out.printf("%s\n", TestX.reverse("female").name());
}
static Gender reverse(String name) {
for (Gender g: Gender.class.getEnumConstants())
if (g.name().equals(name))
return g;
return null;
}
}
我尝试了以下代码(但无法在T.class
编译):
<T extends Enum<?>> T reverse2(String name) {
for (T t: T.class.getEnumConstants())
if (t.name().equals(name)) return t;
return null;
}
T.class
是泛型无法实现的一件事情,因为相同的字节码适用于每个T
。显式传递Class<T>
是常见的解决方法,如Steve P.的回答中所示。 - Alan Stokes