在我的项目中,我有这样的类:
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/