Java中有类似嵌套枚举的东西吗?
我想做一个国家枚举,从中我可以访问它的州,我怎么做 大概是这样的:Java中有类似嵌套枚举的东西吗?,java,types,enums,enumset,enum-map,Java,Types,Enums,Enumset,Enum Map,我想做一个国家枚举,从中我可以访问它的州,我怎么做 大概是这样的: public enum SomeEnum { ARGENTINA { BUENOS_AIRES; } UNITED_STATES { CALIFORNIA, FLORIDA, NEW_YORK, ALASKA; } } SomeEnum state1 = SomeEnum.ARGENTINA.BUENOS_AIRES SomeEnum state2 =
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;
}
}
在这里,您不能将
美国
和阿根廷
分配给某种类型的SomeEnum
@Thusitha Thilina Dayaraten一个例子太完美了!但如果您仍想使用您提到的相同时间:
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);
你会得到你想要的 我建议您寻找一种不同的方法来实现这一点。如果你能想到一种将各州“嵌套”在这些国家的方法,那么你将面临一个问题,即不是所有州都有一个单一的类型。您将无法拥有一个
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;
}
}
您可以使用这样的界面
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;
您到底想要实现什么?根据需求,可以详细说明设计。例如,如果您希望能够将任何国家的状态分配给变量
myState
,您可以声明一个标记接口状态{}
,并让内部枚举实现它(enum agrentic implements state…
),因此state myState=SomeEnum.agrentic.BUENOS\AIRES代码>将起作用。它们都可以实现相同的接口国家/地区
“您到底想要什么”-除了类型安全:-)
Country c = Country.USA;
c = Country.Asia.China;