从枚举字段获取值



我想用WIDTHHEIGHT

的枚举中声明来设置frame的大小

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);
   }
  }

你的问题标题是:

从枚举字段获取值

但这是您的问题:您没有从enum 字段中获得值。你应该使用:

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

,

Dimension.getValue()

有完全不同的意思


作为题外话,我自己会避免在任何地方调用setSize(...),而是使用我的组件的首选大小。如果一个需要精确指定或由公式指定,那么我将重写它的getPreferredSize()方法。


另一方面,我将避免给类、接口或枚举命名与核心Java类名冲突。例如,我将Dimension重命名为GuiDimension或类似的内容。

编辑

注意这个enum:

public enum Fubar {
  FOO, BAR
}

信息面板。FOO和Fubar。BAR不是"静态字段"。它们是枚举Fubar的常量实例。我想你可能对这个概念感到困惑。


编辑2
你的状态:

好吧,我必须更好地解释我的问题,你不明白…我知道enum高度和宽度不是静态成员,但如果你把它们放在任何类,你想要这两个字段被其他类使用,肯定要初始化私有静态int高度= 400 ....为了防止这种情况,我采用了enum。
  1. 我仍然不明白是什么阻止你直接使用枚举实例,正如我在这个答案的开头所发布的。
  2. 对象的状态由其字段的状态定义,可以与其他对象共享,而无需将任何字段设置为静态。这就是getter方法的作用。
  3. 您没有提到为什么其他类需要知道这些字段的值。这里可能有XY问题。

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

的值

再次,这是令人困惑的。其值可如上所述,Dimension.WIDTH.getValue()Dimension.HEIGHT.getValue()。你的问题表明,你觉得你必须传递一个实例变量,不能直接使用枚举,这就引出了为什么的问题。

相关内容

  • 没有找到相关文章

最新更新