gpt4 book ai didi

java - 在 Java 中你应该总是使用枚举而不是常量吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:56:42 24 4
gpt4 key购买 nike

在 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- 是第一个强调我所缺少的东西的人 - 枚举应该是一等公民。在 Java 中,这意味着它在包中有自己的文件——我们没有命名空间。原以为会有点重量级,但真正做了之后,感觉绝对是对的。

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

最佳答案

你把它复杂化了。让我们把它们放在一起。

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

public enum Color
{
BLACK, WHITE;
}

Java 1.5 之前你应该使用类型安全的 Enum 模式:

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() 等...将其视为与常规类与匿名类相同的困境,一旦类(class)开始变得困惑,就该将其移出到自己的文件中了。

关于java - 在 Java 中你应该总是使用枚举而不是常量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/367104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com