假设我有以下内容enum
type:
public enum Country {
CHINA,
JAPAN,
FRANCE,
// ... and all other countries
AUSTRIA,
POLAND;
}
现在我想创建这个枚举的一个子集,概念上类似于:
public enum EuropeanUnion constraints Country {
FRANCE,
// ... and all other countries within the European Union
AUSTRIA,
POLAND;
}
public enum LandlockedCountries constraints Country {
// ... all landlocked countries
AUSTRIA;
}
我想创建一个子集enum
类型,以便我可以编写方法,例如
Set<Person> getNationalMembersOfEuropeanParliament(EuropeanUnion euCountry);
使用子类型EuropeanUnion
对于参数euCountry
防止 API 用户意外进入无效国家/地区,例如非欧盟国家JAPAN
.
是否有任何方法可以“限制”有效枚举值的范围,以便可以从静态类型系统中受益?
您可能需要考虑使用EnumSet
;这不会给你新的类型,但它可以让你以集合论的方式处理枚举值的集合:
public enum Country {
CHINA,
JAPAN,
...;
public static final EnumSet<Country> EUROPEAN_UNION = EnumSet.of(Country.FRANCE, Country.AUSTRIA, ...);
}
EnumSet
实施Set
,所以你可以使用例如addAll()
, removeAll()
and retainAll()
产生并集、差集和交集(只需记住首先复制左侧集合)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)