Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建具有泛型枚举字段的类。用于获取枚举的枚举字段';s值_Java_Generics_Enums - Fatal编程技术网

Java 创建具有泛型枚举字段的类。用于获取枚举的枚举字段';s值

Java 创建具有泛型枚举字段的类。用于获取枚举的枚举字段';s值,java,generics,enums,Java,Generics,Enums,我需要一个类,我可以给它不同的枚举类型,在这个类中,我需要获得给定枚举的所有值 这是我尝试的方法,但我在定义枚举字段的类型时遇到了一个问题: class MyClass{ private Class<T> enumType; //how to say who is T? void <T extends Enum<T>> setEnumType(Class<T> enumType){ this.enumType = enumTyp

我需要一个类,我可以给它不同的枚举类型,在这个类中,我需要获得给定枚举的所有值

这是我尝试的方法,但我在定义枚举字段的类型时遇到了一个问题:

class MyClass{
  private Class<T> enumType; //how to say who is T?

  void <T extends Enum<T>> setEnumType(Class<T> enumType){
     this.enumType = enumType;
  }

  void doSomething(){
     for (Enum<T> literal : enumType.getEnumConstants()) {
         // do something with literal.name();
     }
  }
}
class-MyClass{
私有类enumType;//如何说谁是T?
void setEnumType(类enumType){
this.enumType=enumType;
}
无效剂量测定法(){
for(枚举文字:enumType.getEnumConstants()){
//使用literal.name()执行某些操作;
}
}
}

更新:我无法使该类成为通用类(
MyClass
)。所以我需要其他解决方案。

类似的方法应该可以工作(但是我建议在构造函数中传递enum类):

class-MyClass{
私有类枚举类型;
void setEnumType(类enumType){
this.enumType=enumType;
}
无效剂量测定法(){
for(T literal:enumType.getEnumConstants()){
//使用literal.name()执行某些操作;
}
}
}

类似的方法应该可以工作(但是我建议在构造函数中传递enum类):

class-MyClass{
私有类枚举类型;
void setEnumType(类enumType){
this.enumType=enumType;
}
无效剂量测定法(){
for(T literal:enumType.getEnumConstants()){
//使用literal.name()执行某些操作;
}
}
}

最后,我实施了以下有效的解决方案:

class MyClass{
  private Class<? extends Enum<?>> enumType;

  void <T extends Enum<T>> setEnumType(Class<T> enumType){
     this.enumType = enumType;
  }

  void doSomething(){
     for (Enum<?> literal : enumType.getEnumConstants()) {
         // do something with literal.name();
     }
  }
class-MyClass{
私有类>枚举类型;
void setEnumType(类enumType){
this.enumType=enumType;
}
无效剂量测定法(){
for(枚举文字:enumType.getEnumConstants()){
//使用literal.name()执行某些操作;
}
}

}

最后,我实施了以下有效的解决方案:

class MyClass{
  private Class<? extends Enum<?>> enumType;

  void <T extends Enum<T>> setEnumType(Class<T> enumType){
     this.enumType = enumType;
  }

  void doSomething(){
     for (Enum<?> literal : enumType.getEnumConstants()) {
         // do something with literal.name();
     }
  }
class-MyClass{
私有类>枚举类型;
void setEnumType(类enumType){
this.enumType=enumType;
}
无效剂量测定法(){
for(枚举文字:enumType.getEnumConstants()){
//使用literal.name()执行某些操作;
}
}

}

您必须将该类设置为通用类。或者使用通配符。你真的会使用类型变量
T
做任何事情吗?你必须使类成为泛型的。或者使用通配符。你真的会使用类型变量
T
做任何事情吗?是的,它可以工作,但我忘了提到这个类是一个现有的类,它可以做很多其他事情,我不能用MyClassic参数化它如果你知道你想要哪个类,你不需要泛型,只使用这个类…我不知道这个类,因为它应该用于多个枚举类型如果你有不同的枚举类型,你怎么能有一个类来处理所有的枚举类型?枚举共享一些公共行为(例如,它们实现相同的接口),或者您需要将
MyClass
抽象化,并在子类中分别处理每个枚举类型。枚举是枚举,我不希望有公共接口。枚举为我提供了提取所有值的机制。这对我来说已经足够了。是的,它可以工作,但我忘了提到这个类是一个现有的类,可以做很多其他事情,我不能用MyClassic参数化它如果你知道你想要哪个类,你不需要泛型,只使用这个类…我不知道这个类,因为它应该用于多个枚举类型如果你有不同的枚举类型,你怎么能有一个类来处理所有的枚举类型?枚举共享一些公共行为(例如,它们实现相同的接口),或者您需要将
MyClass
抽象化,并在子类中分别处理每个枚举类型。枚举是枚举,我不希望有公共接口。枚举为我提供了提取所有值的机制。这对我来说已经足够了。