我正在一个项目中,如果我当前的数据中心是DC1,DC2或DC3(而不是DEV),则需要返回true。如果不是,则返回false。

使用下面的代码,我可以找到我的机器名称。我的机器名称看起来像这样-

tps1143.dc1.host.com
tps1142.dc2.host.com
tps1442.dc3.host.com


下面是我的代码-

public enum DatacenterEnum {
    DEV, DC1, DC2, DC3;

    public static String forCode(int code) {
        return (code >= 0 && code < values().length) ? values()[code].name() : null;
    }

    private static final String getHostName() {
    try {
        return InetAddress.getLocalHost().getCanonicalHostName().toLowerCase();
    } catch (UnknownHostException e) {
        // log error
    }

    return null;
    }
}


下面是我的主要方法-

public static void main(String[] args) {
    System.out.println(DatacenterEnum.getHostName());
}


我该如何解决这个问题?

基本上,如果我的代码正在数据中心DC1或DC2或DC3中运行,我只需要返回true或false。我的机器名称包含数据中心信息。

最佳答案

Joshua Bloch在Java Classic Effective Java的项目32中提到了EnumSet的一个有趣的用例场景。此项建议我们在位字段中使用EnumSet,这是枚举int模式的一部分。在枚举int模式中,不同的enum常数表示为2的幂,然后使用位运算符进行组合。

因此,正如Puce在回答中所说的,您可以像这样使用它:

private static final Set<DatacenterEnum> DC_DATACENTERS = EnumSet.of(DC1, DC2, DC3);

关于java - 如果我当前的数据中心在ENUM中,如何返回true或false?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21183109/

10-10 05:21