当前位置: 首页 > 知识库问答 >
问题:

嵌套枚举构造函数

姚智
2023-03-14

我不确定我是否过度工程化了,但我正在考虑创建一个枚举,其中包含一个枚举列表作为它的值,从中我可以得到它的值。

enum Country {
  US(UnitedStates.values()),
  CA(Canada.values());

  public ? list;

  Country(? list) { this.list = list; }
}
enum UnitedStates {
  NJ(new NJClass()),
  PA(new PAClass());

  private BaseKlass klass;
  UnitedStates(BaseClass name){ this.klass = name }
  public BaseKlass getKass() { return klass; }
}
enum Canada {
  ON(new ONClass());

  private BaseKlass klass;
  Canada(BaseKlass name){ this.klass = name }

  public BaseKlass getKass() { return klass; }
}

我无法确定Country枚举的类型,以便正确地将值数组筛选到正确的枚举。例如,我可以用Country.valueOf("US")轻松地获得US枚举。我遇到的困难是从该数组中获得正确的值。我尝试比较名称,Country.valueOf("US"). stream(). Filter(e-

这是可能的还是我想得太多了?


共有2个答案

子车海
2023-03-14

考虑到您不能让Enum扩展一些定制的父类来实现所需的抽象,我将遵循以下方法

public enum States {

    ALABAMA("Alabama", Country.US),
    ARIZONA("Arizona", Country.US),
    ON("Ontario", Country.CA),
    QC("Quebec", Country.CA),
    NS("Nova Scotia", Country.CA);

    States(String name, Country country){
        this.name = name;
        this.country = country;
    }

    private String name;
    private Country country;

    public List<States> getByCountry(Country country){
        return Arrays.stream(States.values()).filter(s -> s.country.equals(country)).collect(Collectors.toList());
    }
}

您还可以在初始化期间将这些状态保存在内存中,这样就不会每次都计算哪些状态属于哪个国家。

public enum States {

    ALABAMA("Alabama", Country.US),
    ARIZONA("Arizona", Country.US),
    ON("Ontario", Country.CA),
    QC("Quebec", Country.CA),
    NS("Nova Scotia", Country.CA);

    States(String name, Country country){
        this.name = name;
        this.country = country;
    }

    private String name;
    private Country country;

    private static Map<Country, List<States>> statesMap = initializeStatesMap();
    private static Map<Country, List<States>> initializeStatesMap(){
        return Arrays.stream(States.values())
                .collect(Collectors.groupingBy(state -> state.country,
                        Collectors.mapping(state -> state, Collectors.toList())));
    }

    public static List<States> getByCountry(Country country){
        return statesMap.containsKey(country) ? statesMap.get(country) : new ArrayList<>();
    }
}

然后呢

public enum Country {

    US,
    CA

}
谯嘉胜
2023-03-14

绝对是过度工程化了。。。我会和你一起去的

enum Country {
  US(<array/list of us states is enough>),
  CA(<array/list of ca states is enough>);

  public List<State> list;

  Country(List<State> list) { this.list = list; }
}
 类似资料:
  • 问题内容: 目前,我们的代码存在一种情况,即我们在Java层中使用枚举,该枚举通过以下构造函数存储id和“显示值”: 我们希望打字稿中的某些内容能够与之匹配,以便以有意义的方式显示状态以执行逻辑并在前端向用户显示值。这可能吗?有没有更好的方法来解决这个问题?我们希望避免使用诸如status.id()= 1或status.name()=’Active’这样的逻辑,从而推动枚举。 谢谢 问题答案: T

  • 我正在为即将到来的考试做一些修订,我对对象构造函数中枚举的使用有点困惑。

  • 问题内容: 我想知道在Java中是否可以嵌套枚举。 在这里,我想做的是: 拥有一个由CAT和DOG组成的物种,将允许我访问可用CAT和DOG品种的子枚举。例如,我希望能够测试是否装有CAT或DOG,以及动物是否是PERSAN CAT或PITBULL狗。CAT和DOG品种必须是不同的枚举,即CatBreeds枚举和DogBreeds枚举。 这是我要使用的访问模式的示例: 种类: 物种 种狗 品种:

  • 问题内容: 如何从枚举构造函数中引发异常?例如: 产生错误 未处理的异常类型IOException 问题答案: 由于实例是在静态初始化程序中创建的,因此请抛出ExceptionInInitializerError。

  • 我在某处看到了枚举的以下解决方案 这证明了我想做的,除了ArrayBuffer中隐藏了一个var......这有点令人讨厌。 我真正想要的是val lookupTable=Map(),当一个请求进来时,我可以查找“星期一”并将其转换为我的枚举星期一并在整个软件中使用枚举。这通常是如何做到的。我看到了密封的特征,但没有看到一种方法来自动确保当有人添加扩展它的类时,它会自动添加到查找表中。有没有办法使

  • 问题内容: 这个问题是关于Java的有趣行为的:在某些情况下,它为嵌套类生成了其他(不是默认的)构造函数。 这个问题也与Java使用该奇怪的构造函数生成的奇怪的匿名类有关。 考虑以下代码: 这将打印: 好。接下来,让构造函数私有: 再次运行程序。接收: 还可以 但是现在,让我们以这种方式修改方法(添加类创建的新实例): 然后输入变为: 这是什么: a.TestNested $ A(a.TestNe