Tom*_*ine 41
不,枚举应该是一个完整的静态枚举.
在编译时,您可能希望从某种类型的另一个源文件生成枚举.java文件.你甚至可以像这样创建一个.class文件.
在某些情况下,您可能需要一组标准值但允许扩展.通常的方法是使用interface
接口和enum
实现interface
标准值的接口.当然,switch
当你只有一个参考时,你就失去了能力interface
.
Yuv*_*val 13
在窗帘后面,枚举是具有私有构造函数的POJO和枚举类型的一组公共静态最终值(参见此处的示例).事实上,直到Java5,以这种方式构建自己的枚举被认为是最佳实践,Java5将该enum
关键字作为简写引入.请参阅Enum <T>的来源以了解更多信息.
因此,使用公共静态最终常量数组编写自己的"TypeSafeEnum"应该没有问题,这些常量由构造函数读取或传递给它.
另外,请自己帮忙并覆盖equals
,hashCode
并且toString
,如果可能的话,创建一个values
方法
问题是如何使用这样的动态枚举...你不能从文件中读取值"PI = 3.14"来创建enum MathConstants
然后继续使用MathConstants.PI
你想要的任何地方......
And*_*ndy 10
我需要做这样的事情(用于单元测试),我遇到了这个 - EnumBuster:http: //www.javaspecialists.eu/archive/Issue161.html
它允许添加,删除和恢复枚举值.
编辑:我刚刚开始使用它,并发现java 1.5需要进行一些细微的更改,我目前仍然坚持:
<Memento>
我采用的方法是在外部保存枚举的值和名称,最终目标是能够编写尽可能接近语言枚举的代码.
我希望我的解决方案看起来像这样:
enum HatType
{
BASEBALL,
BRIMLESS,
INDIANA_JONES
}
HatType mine = HatType.BASEBALL;
// prints "BASEBALL"
System.out.println(mine.toString());
// prints true
System.out.println(mine.equals(HatType.BASEBALL));
Run Code Online (Sandbox Code Playgroud)
我最终得到了这样的东西:
// in a file somewhere:
// 1 --> BASEBALL
// 2 --> BRIMLESS
// 3 --> INDIANA_JONES
HatDynamicEnum hats = HatEnumRepository.retrieve();
HatEnumValue mine = hats.valueOf("BASEBALL");
// prints "BASEBALL"
System.out.println(mine.toString());
// prints true
System.out.println(mine.equals(hats.valueOf("BASEBALL"));
Run Code Online (Sandbox Code Playgroud)
由于我的要求是必须能够在运行时向枚举添加成员,我还实现了该功能:
hats.addEnum("BATTING_PRACTICE");
HatEnumRepository.storeEnum(hats);
hats = HatEnumRepository.retrieve();
HatEnumValue justArrived = hats.valueOf("BATTING_PRACTICE");
// file now reads:
// 1 --> BASEBALL
// 2 --> BRIMLESS
// 3 --> INDIANA_JONES
// 4 --> BATTING_PRACTICE
Run Code Online (Sandbox Code Playgroud)
我称它为动态计数"模式",以及你阅读的原创设计和它的修订版.
两者之间的区别在于修订后的版本是在我真正开始研究OO和DDD之后设计的.我在设计名义上是程序性DDD的时候设计的第一个,时间压力不小于此.
归档时间: |
|
查看次数: |
106568 次 |
最近记录: |