Java Enums可以有行为吗?

Dav*_*ave 14 java oop enums

在Java中,Enum可以完成Enums所做的伟大事情,但也可以拥有方法(行为和逻辑).与使用枚举的类相比,它有什么优势?举例说明这一点也很受欢迎.

Ada*_*ume 17

这是一个简单的例子:

enum RoundingMode {
    UP {
        public double round(double d) {
            return Math.ceil(d);
        }
    },
    DOWN {
        public double round(double d) {
            return Math.floor(d);
        }
    };

    public abstract double round(double d);
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*eed 9

Enum 类型也是实现真正单身人士的好方法.

Java中的经典单例模式通常涉及私有构造函数和公共静态工厂方法,但仍然容易通过反射或(反)序列化实例化.枚举类型可以防止这种情况发生.


Jon*_*eet 7

我不太确定问题的标题在哪里与其余部分相符.是的,Java枚举有行为.他们也可以拥有状态,虽然它应该真的,真的是不可改变的状态.(可变的枚举值的想法是非常可怕的IMO.)

Java中的枚举基本上是一组固定的对象.好处是你知道如果你有这种类型的引用,它总是一个null或众所周知的集合之一.

我个人非常喜欢Java enums,并希望C#也拥有它们 - 它们比C#的枚举更加面向对象,这些枚举基本上都是"命名数字".在初始化顺序方面存在一些"问题",但它们通常都是晶圆厂.