当前位置:  开发笔记 > 编程语言 > 正文

你应该总是使用枚举而不是Java中的常量

如何解决《你应该总是使用枚举而不是Java中的常量》经验,为你挑选了2个好方法。

在java <1.5中,常量将像这样实现

public class MyClass {
    public static int VERTICAL = 0;
    public static int HORIZONTAL = 1;

    private int orientation;

    public MyClass(int orientation) {
        this.orientation = orientation;
    }
...

你会像这样使用它:

MyClass myClass = new MyClass(MyClass.VERTICAL);

现在,在1.5中显然你应该使用枚举:

public class MyClass {
    public static enum Orientation {
        VERTICAL, HORIZONTAL;
    }

    private Orientation orientation;

    public MyClass(Orientation orientation) {
        this.orientation = orientation;
    }
...

现在你会像这样使用它:

MyClass myClass = new MyClass(MyClass.Orientation.VERTICAL);

我觉得有点难看.现在我可以轻松添加几个静态变量:

public class MyClass {
    public static Orientation VERTICAL = Orientation.VERTICAL;
    public static Orientation HORIZONTAL = Orientation.HORIZONTAL;

    public static enum Orientation {
        VERTICAL, HORIZONTAL;
    }

    private Orientation orientation;

    public MyClass(Orientation orientation) {
        this.orientation = orientation;
    }
...

现在我可以再次这样做:

MyClass myClass = new MyClass(MyClass.VERTICAL);

具有所有类型安全的枚举功能.

这是好风格,坏风格还是两者都没有.你能想到更好的解决方案吗?

更新

Vilx-是第一个突出我觉得我缺少的东西 - 这个enum应该是一流的公民.在java中,这意味着它在包中获得了自己的文件 - 我们没有名称空间.我曾经以为这会有点重量级,但实际上已经做到了,它绝对是正确的.

Yuval的答案很好,但它并没有真正强调非嵌套枚举.此外,对于1.4 - JDK中有很多使用整数的地方,我真的在寻找一种方法来发展这种代码.



1> Yuval Adam..:

你太复杂了.让我们一起来吧.

在Java 1.5之后,你应该使用Java Enum类:

public enum Color
{
    BLACK, WHITE;
}

Pre Java 1.5你应该使用类型安全的枚举模式:

public class Color
{
    public static Color WHITE = new Color("white");
    public static Color BLACK = new Color("black");

    private String color;

    private Color(String s)
    {
        color = s;
    }
}

在这两种方式中你都这样称呼它:

drawBackground(Color.WHITE);

具体来说,关于你的问题.这是代码风格的问题,但我认为首选方法是将枚举保存在各自的类中.特别是一旦他们开始让自己的方法,如getName(),getId()等...把它看成是同样的困境为常规类与匿名类,一旦类开始变得混乱,现在是时候把它搬出来自己的文件.



2> Yoni Roit..:

你知道吗,你可以导入Orientation并说出来

MyClass myClass = new MyClass(Orientation.VERTICAL);


短?什么......所以你不是一条输入线而是一遍又一遍地写MyClass?这对我来说并不短暂也不干净.
推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有