3

我想做一个 Country 枚举,我可以从中访问它的州,我该怎么做?

像这样的东西:

public enum SomeEnum {

     ARGENTINA {
       BUENOS_AIRES;
     }

     UNITED_STATES {
       CALIFORNIA, FLORIDA, NEW_YORK, ALASKA;
     }

}

SomeEnum state1 = SomeEnum.ARGENTINA.BUENOS_AIRES
SomeEnum state2 = SomeEnum.UNITED_STATES.CALIFORNIA;
4

4 回答 4

4

您可以使用类似的界面

interface Country {
    Country USA = Americas.USA;

    enum Asia implements Country {
        Indian,
        China,
        SriLanka
    }
    enum Americas implements Country {
        USA,
        Brazil
    }
    enum Europe implements Country {
        UK,
        Ireland,
        France
    }
}

你可以拥有

Country c = Country.USA;
c = Country.Asia.China;
于 2016-10-05T07:24:20.323 回答
3

不能将嵌套枚举分配给其父级,例如

SomeEnum state1 = SomeEnum.ARGENTINA.BUENOS_AIRES

你能做的是

class Test {
    SomeEnum someEnum = SomeEnum.SRILANKA;
    SomeEnum.UNITED_STATES us = SomeEnum.UNITED_STATES.CALIFORNIA;
    SomeEnum.ARGENTINA argentina = SomeEnum.ARGENTINA.BUENOS_AIRES;
}

enum SomeEnum {
    SRILANKA;

    enum ARGENTINA {
        BUENOS_AIRES;
    }

    enum UNITED_STATES {
        CALIFORNIA, FLORIDA, NEW_YORK, ALASKA;
    }
}

在这里你不能分配UNITED_STATESARGENTINA类型SomeEnum

于 2016-10-05T05:55:12.137 回答
1

我建议您寻找一种不同的方法来实现这一目标。如果您能想出一种将国家“嵌套”在国家/地区中的方法,那么您将遇到没有为所有国家提供单一类型的问题。您将无法拥有state可以分配美国州或阿根廷州的变量。

这是您可以考虑的替代模型:

public interface State {
}

private enum UnitedStates implements State {
    CALIFORNIA, ...;
}

private enum ArgentinaStates implements State {
    BUENOS_AIRES, ...;
}

public enum Country {
        SRILANKA(),
        US(UnitedStates.values()),
        ARGENTINA(ArgentinaStates.values());

    Country(State... states) {
        this.states = Arrays.toList(states);
    }

    private final List<State> states;

    public List<State> getStates() {
        return states;
    }
}

然后你可以这样做:

State state;
state = ArgentinaStates.BUENOS_AIRES;
state = UnitedStates.CALIFORNIA;
于 2016-10-05T06:46:58.810 回答
0

@Thusitha Thilina Dayaratne 的例子非常完美!但是,如果您仍然想像您提到的那样使用相同的时间:

SomeEnum state1 = SomeEnum.ARGENTINA.BUENOS_AIRES SomeEnum state2 = SomeEnum.UNITED_STATES.CALIFORNIA;

然后这样做:

    Object state1, state2, state3;

    state1 = SomeEnum.UNITED_STATES.CALIFORNIA;
    state2 = SomeEnum.ARGENTINA.BUENOS_AIRES;
    state3 = SomeEnum.SRILANKA;

    System.out.println(state1);
    System.out.println(state2);
    System.out.println(state3);

你会得到你想要的!

于 2016-10-05T06:27:37.267 回答