gpt4 book ai didi

Java 级联枚举?

转载 作者:行者123 更新时间:2023-11-29 06:47:20 25 4
gpt4 key购买 nike

在我的项目中,我有这样的类:

class Statut {
String satDomain;
String staCode;
}

但是使用字符串并不是我想要的。它过于宽松,使用常量是不够的。

我想使用枚举但发现一个问题:

class Statut {
Domain satDomain;
StatutCode staCode;
}
enum Domain { }
enum StatutCode { }

此解决方案要好得多,但您可以设置不在所选域中的 StatutCode。

您是否在您的项目中找到了解决此类问题的方法?

谢谢你的帮助

弗鲁米尼

最佳答案

实际上对 extraneon 的回答略有改进。

首先定义StatutCode 枚举,然后将EnumSet< StatutCode > 分配给每个Domain 枚举值。然后在 Statut constructor

中验证就非常简单了
enum StatutCode
{
ONE,
TWO,
THREE,
FOUR
};

enum Domain
{
DOMAIN_1( EnumSet.of( StatutCode.ONE, StatutCode.TWO ) ),
...
DOMAIN_N( EnumSet.of( StatutCode.TWO, StatutCode.THREE ) );

private final EnumSet< StatutCode> validStatCodes;

Domain( EnumSet< StatutCode > validStatCodes )
{
this.validStatCodes = validStatCodes;
}

public boolean isValidCode ( final StatutCode code )
{
return validStatCodes.contains( code );
}
}

class Statut {
final Domain staDomain;
final StatutCode staCode;

Statut(
final Domain staDomain,
final StatutCode staCode
)
{
if ( ! staDomain.isValidCode( staCode ) )
{
throw new IllegalArgumentException(
"Invalid code " + staCode + " for domain " + staDomain
);
}

this.staDomain = staDomain;
this.staCode = staCode;
}

}

关于Java 级联枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2668141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com