的数量如何才能知道,我的枚举有多少价值在这个例子中:泛型类枚举的,价值
public class Analyser<C extends Enum<C>>{
private long[] dist;
public Analyser() {
super();
dist = new long [C.getEnumConstants().length];
}
}
最后一行不起作用。
的数量如何才能知道,我的枚举有多少价值在这个例子中:泛型类枚举的,价值
public class Analyser<C extends Enum<C>>{
private long[] dist;
public Analyser() {
super();
dist = new long [C.getEnumConstants().length];
}
}
最后一行不起作用。
您需要在类字面枚举的经过:
public Analyser(Class<C> enumType) {
super();
dist = new long [enumType.getEnumConstants().length];
}
...
Analyser<MyEnum> analyser = new Analyser(MyEnum.class);
这是因为C
有在运行时由于type erasure没有意义。
我猜最后一行不能编译。你需要Class
实例来做到这一点。这里是你的代码的修改版本:
public class Analyser<C extends Enum<C>>{
private long[] dist;
public Analyser(Class<C> clazz) {
super();
dist = new long [clazz.getEnumConstants().length];
}
}
然而,我不能确切地明白你为什么从Enum
扩展类。如果你在开发时知道枚举类,你可以只说MyEnum.values().length
。
如果你想写一个检查多少个值是否有任何枚举你可以只写像一个实用方法的通用代码:
public static int enumSize(Class<C extends Enum<C>> clazz) {
return clazz.getEnumConstants().length];
}
你得到什么错误? – PearsonArtPhoto
您无法访问泛型类型。这不是一个变量。如果构造函数接受了枚举的引用,则可以找到该长度。 – JustinKSU
@JustinKSU Enum本身被声明为'public abstract class Enum>'。 –
assylias