Java 枚举的泛型类,值的数目
如何在本例中找出我的枚举有多少个值:Java 枚举的泛型类,值的数目,java,generics,enums,Java,Generics,Enums,如何在本例中找出我的枚举有多少个值: public class Analyser<C extends Enum<C>>{ private long[] dist; public Analyser() { super(); dist = new long [C.getEnumConstants().length]; } } 公共类分析器{ 私人长[]区; 公共分析人员(){ 超级(); dist=新长[C.getEnumConstants().
public class Analyser<C extends Enum<C>>{
private long[] dist;
public Analyser() {
super();
dist = new long [C.getEnumConstants().length];
}
}
公共类分析器{
私人长[]区;
公共分析人员(){
超级();
dist=新长[C.getEnumConstants().length];
}
}
最后一行无效。您需要传入枚举的类文本:
public Analyser(Class<C> enumType) {
super();
dist = new long [enumType.getEnumConstants().length];
}
...
Analyser<MyEnum> analyser = new Analyser(MyEnum.class);
公共分析器(类枚举类型){
超级();
dist=新长[enumType.getEnumConstants().length];
}
...
分析仪=新分析仪(MyEnum.class);
这是因为
C
在运行时没有意义,因为。我猜最后一行无法编译。您需要Class
实例来执行此操作。以下是您的代码的修改版本:
public class Analyser<C extends Enum<C>>{
private long[] dist;
public Analyser(Class<C> clazz) {
super();
dist = new long [clazz.getEnumConstants().length];
}
}
无法访问泛型类型。这不是一个变量。如果构造函数引用了枚举,则可以找到长度。@JustinKSU Enum本身被声明为
公共抽象类Enum
。这是有效的。非常感谢。如果我只想将任意枚举作为私有字段,我将如何声明该类?@ratatosk不完全清楚您的问题。是否要声明泛型枚举常量的变量?他们只需要输入C
。例如,这里getEnumConstants()
返回一个C[]
。
public static int enumSize(Class<C extends Enum<C>> clazz) {
return clazz.getEnumConstants().length];
}