从another question中,我了解到在中可以为Enum的每个实例定义特定的方法
public class AClass {
private enum MyEnum{
A { public String method1(){ return null; } },
B { public Object method2(String s){ return null; } },
C { public void method3(){ return null; } } ;
}
...
}我感到惊讶的是,这甚至是可能的,这种特定于每个实例的“独占方法”是否有一个名称来查找文档?
另外,应该如何使用?因为下一个不是编译:
private void myMethod () {
MyEnum.A.method1();
}我该如何使用这些“排他性”方法?
发布于 2011-07-01 18:48:41
每个enum都是一个匿名的内部类。因此,与任何匿名内部类一样,您可以添加所需的所有方法,但无法在类之外引用它们,因为该类没有定义方法的类型。
允许enum实现上的方法的优点是它允许一种策略模式,其中枚举本身有一个抽象方法或一个默认实现,而enum的特定成员具有该方法的实现,这些实现可能会做一些不同的事情。
我使用这种技术大大降低了开关语句的代码复杂度。而不是在其他类中打开枚举,只需获得对它的引用并调用方法,让枚举本身来处理它。当然,这取决于场景是否有意义,但它可以极大地降低代码复杂性。
https://stackoverflow.com/questions/6551851
复制相似问题