這裏什麼是你正在尋找的另一個示範。這與以前的解決方案之間的區別在於,這個是更通用和可重用的模式。這實際上超出了原來的問題,以顯示這種方法的其他好處。所以你可能只是評論你不需要的部分。我還附上一個單元測試來演示行爲。
所以基本上找名Apple
或APPLE
這些枚舉一個只寫:
FruitVeg<?> fvg = getEnum("APPLE", Fruits.class, Vegetables.class);
FruitVeg<>
是一個接口,它允許也枚舉的內部挖掘,該接口允許做一些下面的枚舉非常有趣的事情。這裏只是一些你可以與做的事情:
Enum.valueOf(fvg.getDeclaringClass(), fvg.name())
:返回枚舉值例如APPLE
fvg.getRaw()
:返回枚舉值例如APPLE
fvg.name()
:返回枚舉的字符串名稱例如APPLE
fvg.getFriendlyName()
例如: 蘋果
fvg.getDeclaringClass()
:回報Class<Enum<?>>
例如類ox.dummy.dummyTest $水果
fvg.getClass()
:類ox.dummy.dummyTest $水果回報Class<?>
EnumSet.allOf(fvg.getDeclaringClass()))
:例如[蘋果,梨]
這裏是代碼
@Test
public void doSimpleTest() throws Exception {
FruitVeg<?> fvg = getEnum("APPLE", Fruits.class, Vegetables.class);
log.info("{} : {} : {} : {} : {}", fvg.name(), fvg.getFriendlyName(), fvg.getClass(), fvg.getDeclaringClass(), EnumSet.allOf(fvg.getDeclaringClass()));
log.info("get enum: {} ", Enum.valueOf(fvg.getDeclaringClass(), fvg.name()));
}
public interface FruitVeg<T extends Enum<T>> {
String name();
String getFriendlyName();
Class<T> getDeclaringClass();
T getRaw();
}
enum Fruits implements FruitVeg<Fruits> {
APPLE("Apple"),
PEAR("Pear");
Fruits(String friendlyName) {
this.friendlyName = friendlyName;
}
private final String friendlyName;
@Override
public String getFriendlyName() {
return friendlyName;
}
@Override
public Fruits getRaw() {
return this;
}
}
enum Vegetables implements FruitVeg<Vegetables> {
CARROT("Carrot"),
LETTUCE("Lettuce");
Vegetables(String friendlyName) {
this.friendlyName = friendlyName;
}
private final String friendlyName;
@Override
public String getFriendlyName() {
return friendlyName;
}
@Override
public Vegetables getRaw() {
return this;
}
}
public static FruitVeg<?> getEnum(String name, Class<? extends FruitVeg<?>>... fvgClasses) {
for (Class<? extends FruitVeg<?>> fruitVegCLass : Arrays.asList(fvgClasses)) {
for (FruitVeg<?> fvg : fruitVegCLass.getEnumConstants()) {
if (name.equals(fvg.name()) || name.equals(fvg.getFriendlyName())) {
return fvg;
}
}
}
return null;
}
因爲我不想給枚舉結合,我想我唯一的選擇是1 – dalawh
@dalawh如果您發現有任何答案對你有幫助。然後upvote並接受這個答案,以便將來它會對別人有幫助。我發現你問了這麼多問題,但還沒有接受任何答案。因此,如果任何答案解決了您的問題,請接受該答案。 –
所以沒有辦法在枚舉中獲得枚舉類型,而不必將枚舉組合起來? – dalawh