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
抽象化,并在子类中分别处理每个枚举类型。枚举是枚举,我不希望有公共接口。枚举为我提供了提取所有值的机制。这对我来说已经足够了。