首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Enum:每个实例的独占方法

Enum:每个实例的独占方法
EN

Stack Overflow用户
提问于 2011-07-01 18:28:47
回答 2查看 9.2K关注 0票数 24

another question中,我了解到在中可以为Enum的每个实例定义特定的方法

代码语言:javascript
运行
复制
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; } } ;
    }

    ...
}

我感到惊讶的是,这甚至是可能的,这种特定于每个实例的“独占方法”是否有一个名称来查找文档?

另外,应该如何使用?因为下一个不是编译:

代码语言:javascript
运行
复制
    private void myMethod () {
        MyEnum.A.method1();
    }

我该如何使用这些“排他性”方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-01 18:39:18

您不能引用这些方法,因为您实际上正在为每个枚举创建匿名(*)类。由于它是匿名的,所以只能从匿名类本身或通过反射引用此类方法。

当您在枚举中声明抽象方法并为每个枚举单独实现该方法时,这种技术非常有用。

(*) JLS 8.9 enum部分说:“枚举常量的可选类主体隐式定义了一个匿名类声明(§15.9.5),它扩展了立即包围枚举类型。”

票数 15
EN

Stack Overflow用户

发布于 2011-07-01 18:48:41

每个enum都是一个匿名的内部类。因此,与任何匿名内部类一样,您可以添加所需的所有方法,但无法在类之外引用它们,因为该类没有定义方法的类型。

允许enum实现上的方法的优点是它允许一种策略模式,其中枚举本身有一个抽象方法或一个默认实现,而enum的特定成员具有该方法的实现,这些实现可能会做一些不同的事情。

我使用这种技术大大降低了开关语句的代码复杂度。而不是在其他类中打开枚举,只需获得对它的引用并调用方法,让枚举本身来处理它。当然,这取决于场景是否有意义,但它可以极大地降低代码复杂性。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6551851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档