如何根据输入在 Java 中创建一个 returns 枚举的方法?

How do I create a method in Java that returns an enum depending on input?

我有两个枚举

public enum CurrencyOptionEUR {
  EUR_EUR("euro"),
  EUR_GBP("pound");
}

public enum CurrencyOptionAsia {
  ASIA_YEN("yen"),
  ASIA_EUR("euro");
}

它们的值可能会重叠,如示例所示。

我想要的是一种基于参数 return 一个或另一个枚举的方法。 像这样

public enum switchEnum(String country){
    if(country.equals("Japan")) return CurrencyOptionAsia;
    else return CurrencyOptionEur;
}

但是枚举不能是方法的return类型

实现此行为的最佳方式是什么? 谢谢

Java 是一种强类型语言,因此所有变量和 return 类型都需要具有实际类型。考虑到这一点,我建议让两个枚举都实现一个通用接口:

interface CurrencyOption {
}

然后按如下方式修改您现有的枚举:

public enum CurrencyOptionEUR implements CurrencyOption {
  // Contents omitted for brevity
}

// Probably should rename this one for consistency
public enum CurrencyAsia implements CurrencyOption {
  // Contents omitted for brevity
}

然后使用 CurrencyOption[] 作为您的 return 类型:

public CurrencyOption[] switchEnum(String country){
    if(country.equals("Japan")) return CurrencyAsia.values();
    else return CurrencyOptionEur.values();
}

话虽如此,我想指出 Java 已经有 built-in support for currencies since version 1.4,我 强烈 推荐使用这个(或另一个现有的库)而不是创建自己的。

我遇到了同样的问题:您必须 return 一个对象,然后检查调用方法中的实例并相应地解析它。

但是对于你的例子,我无论如何都不会采用这种方法。 Java 有自己的 Currency class,我宁愿使用那个,因为它具有 getSymbol()getDisplayName()。因此,不是 return 枚举,而是 return 一组货币。

所有枚举都实现了接口Enum,所以你当然可以写一个returns这样的枚举的方法。

public Enum<?>[] switchEnum(String country) {
    if(country.equals("Japan")) return CurrencyOptionAsia.values();
    else return CurrencyOptionEur.values();
}