从枚举字段中获取值

时间:2014-03-15 15:25:12

标签: java enums

我想用 WIDTH 设置框架的大小,并在枚举中声明 HEIGHT

  

setSize(dimension.getValue(),dimension.getValue());

但是当我进行测试时,我在输出中收到的不是枚举值,而是在这种情况下的枚举基数命令{1,2}。我如何更改我的代码以返回正确的值?

public enum Dimension {

    WIDTH(700), HEIGHT(400);
    private final int value;

    private Dimension(int value) {
    this.value = value;
    }
    public int getValue(){
    return value;

   }
  }




public class MainFrame extends JFrame {
     private Dimension dimension;
     public static void main(String[] args) {
         final MainFrame mainFrame = new MainFrame();
         mainFrame.setVisible(true);
}
public MainFrame() {
    initGameFrame();
}

private void initGameFrame() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(dimension.getValue(), dimension.getValue());
    add(gamePanel);
    setResizable(false);
    setUndecorated(true);
    pack();
    setLocationRelativeTo(null);
   }
  }

1 个答案:

答案 0 :(得分:2)

您的问题标题是:

  

从枚举字段中获取值

但那是你的问题:你没有从枚举字段中获取值。你应该使用:

Dimension.WIDTH.getValue()
Dimension.HEIGHT.getValue()

Dimension.getValue()

完全具有不同的含义。


另外,我自己,我会避免在任何地方调用setSize(...),而是使用我的组件的首选大小。如果需要精确指定或通过公式指定,那么我将覆盖其getPreferredSize()方法。


另外,我会避免提供与核心Java类名冲突的类,接口或枚举名称。例如,我将Dimension重命名为GuiDimension或其他一些。


修改

请注意,使用此枚举:

public enum Fubar {
  FOO, BAR
}

Fubar.FOO和Fubar.BAR不是"静态字段"。它们是枚举Fubar的不变实例。我认为你可能会对这个概念感到困惑。


编辑2
你说:

  好吧,我必须更好地解释我的问题,你不明白......我知道,因为高度和宽度不是静态成员,但如果你把它们放在任何一个班级而你想要这两个字段被其他类使用,肯定必须初始化private static int height = 400 ....以防止这个我采用了枚举。

  1. 我仍然没有看到是什么阻止你直接使用枚举实例,就像我在本回答的开头发布的那样。
  2. 对象的状态由其字段的状态定义,可以与其他对象共享,而不会使任何字段静态。这就是getter方法的用途。
  3. 您没有提到为什么其他课程需要知道这些字段的价值。您可能在这里XY Problem
  4.   

    我的问题是我无法访问这些枚举的值

    同样,这令人困惑。可以如上所述获得值Dimension.WIDTH.getValue()Dimension.HEIGHT.getValue()。你的问题表明你觉得你必须传入一个实例变量并且不能直接使用枚举,这就引出了原因的问题。