繁体   English   中英

从枚举字段中获取值

[英]getting values from enum fields

我想设置框架的大小与在枚举中声明的WIDTHHEIGHT

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

你的问题标题是:

从枚举字段中获取值

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

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

不,

Dimension.getValue()

它完全有不同的含义。


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


另外,我会避免给出与核心Java类名冲突的类,接口或枚举名称。 例如,我将Dimension重命名为GuiDimension或其他类似的东西。


编辑

请注意,使用此枚举:

public enum Fubar {
  FOO, BAR
}

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


编辑2
你说:

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

  1. 我仍然没有看到是什么阻止你直接使用枚举实例,因为我在这个答案的开头发布了。
  2. 由其字段状态定义的对象状态可以与其他对象共享,而不会使任何字段静态。 这就是getter方法的用途。
  3. 您没有提到为什么其他类需要知道这些字段的值。 您可能在此处遇到XY问题

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM