gpt4 book ai didi

Java:枚举的通用方法

转载 作者:IT老高 更新时间:2023-10-28 20:31:50 26 4
gpt4 key购买 nike

帮助我理解泛型。假设我有两个枚举作为内部类,如下所示:

public class FoodConstants {
public static enum Vegetable {
POTATO,BROCCOLI,SQUASH,CARROT;
}

public static enum Fruit {
APPLE,MANGO,BANANA,GUAVA;
}
}

我不想让两个枚举都实现一个接口(interface),并且必须两次实现相同的方法,我希望在外部类中有一个方法,它可以执行以下操作:

public <e> String getEnumString<Enum<?> e, String s) {
for(Enum en: e.values()) {
if(en.name().equalsIgnoreCase(s)) {
return s;
}
}
return null;
}

但是,此方法无法编译。我要做的是找出字符串值是否是枚举值的名称,在任何枚举中,无论是蔬菜、水果,还是什么。不管这实际上是否是一种冗余方法,我试图(重新)编写的方法有什么问题?

基本上我想这样做:

public class FoodConstants {
public static enum Vegetable {
POTATO,BROCCOLI,SQUASH,CARROT;
}

public static enum Fruit {
APPLE,MANGO,BANANA,GUAVA;
}

public <e> String getEnumString<Enum<?> e, String s) {
for(Enum en: e.values()) {
if(en.name().equalsIgnoreCase(s)) {
return s;
}
}
return null;
}
} //end of code

最佳答案

public static <E extends Enum<E>>
String getEnumString(Class<E> clazz, String s){
for(E en : EnumSet.allOf(clazz)){
if(en.name().equalsIgnoreCase(s)){
return en.name();
}
}
return null;
}

原文有几个问题:

  1. 它接受枚举的实例而不是代表枚举的类您的问题表明您想使用哪个。
  2. 未使用类型参数。
  3. 它返回输入而不是实例名称。也许返回实例会更有用——Enum.valueOf(String) 的不区分大小写版本.
  4. 它调用实例上的静态方法,以便您进行迭代。 EnumSet 为您完成所有反射工作。

关于Java:枚举的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16406298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com