Java 中是否有嵌套枚举之类的东西?
Is there something like nested enums in Java?
我想做一个国家枚举,我可以从中访问它的状态,我该怎么做?
像这样:
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;
您不能像
那样将嵌套枚举分配给它的父级
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_STATES
和ARGENTINA
赋值给SomeEnum
类型
@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);
你会得到你想要的!
我建议您寻找一种不同的方法来实现这一点。如果您能想出一种 'nesting' 国家/地区中的州的方法,那么您将遇到没有针对所有州的单一类型的问题。您将无法拥有可以分配美国州或阿根廷州的 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;
你可以使用像
这样的界面
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;
我想做一个国家枚举,我可以从中访问它的状态,我该怎么做?
像这样:
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;
您不能像
那样将嵌套枚举分配给它的父级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_STATES
和ARGENTINA
赋值给SomeEnum
@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);
你会得到你想要的!
我建议您寻找一种不同的方法来实现这一点。如果您能想出一种 'nesting' 国家/地区中的州的方法,那么您将遇到没有针对所有州的单一类型的问题。您将无法拥有可以分配美国州或阿根廷州的 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;
你可以使用像
这样的界面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;