静态实例与枚举

时间:2014-11-16 16:46:37

标签: java static enums

我是一名中间程序员,遇到了一个难题。

我正在尝试确定在将固定的参数用于某些方法时使用的策略。

e.g。我想这样做:

void aMethod (int i, Color color)

其中Color是我自己的创作。

我看到它的方式,我可以创建一个枚举颜色。我知道该怎么做。

我也可以这样做:

public class Color{

public static Color blue = new Color(23, 22, 21);
public static Color red = new Color(12, 32 ,10);

private int a;
private int b;
private int c;

private Color(int a, int b, int c){
this.a = a;
this.b = b;
this.c = c;
}

methods...

问题是,在尝试两者之后,我可以用它们做同样的事情。唯一的区别是我觉得我的课堂例子更容易理解,我确切知道它的作用。虽然我可以编写一个多功能枚举,但我并不完全确定哪些变量是静态的,公共的,私有的等等,也不确定它将使用什么样的内存。这有点乱。

所以,我的问题是,我应该选择上面的课程,而不是枚举吗?是否有一些我不知道可能会增加Enums案例的事情?

3 个答案:

答案 0 :(得分:1)

在你的方法中

void aMethod (int i, Color color)

如果您使用枚举作为参数。您只能使用在枚举中定义的颜色。 但是,如果使用静态实例,则无法确保该参数是Color类中的实例颜色。实际上,任何Color变量都可以转换为这种方法。

实际上,枚举在内存中是整数,使用枚举可以节省一些时间。

答案 1 :(得分:1)

在以下情况下使用枚举:

  • 预定义的值列表(对象)
  • 无法使用未在预定义值列表中列出的值(可以验证 - 安全类型)
  • JVM仅为枚举值创建固定数量的Object实例。

在以下时间使用静态:

  • 值(对象)列表可以使用不固定
  • 被认为是不安全的方法,因为方法参数可以由类的任何实例传递。

您的情况:

  • 如果您想限制/验证来电者可以传递的颜色' aMethod'功能 - 使用ENUM
  • 如果您希望来电者可以将任何彩色实例传递给' aMethod' ---使用静态定义

答案 2 :(得分:0)

如果可能(你的值有限,并且不想允许动态创建的值),我总是会选择枚举。

  • 您可以有效防止错误输入(请参阅https://stackoverflow.com/a/9254703/1606867
  • Enumy提供了一些额外的功能:
    • 您可以迭代枚举:
      for(ColorEnum enumEntry : ColorEnum.values()) //do something with enumEntry
    • 您可以在开关/案例中使用枚举:
      ColorEnum ce; // with some value of course switch (ce) { case blue: break; case red: break; default: break; }
    • 您可以使用枚举功能,例如GUI中的组合框,列表等:
      new JComboBox<>(ColorEnum.values());