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;