gpt4 book ai didi

java - 从枚举字段获取值

转载 作者:行者123 更新时间:2023-12-02 06:04:12 27 4
gpt4 key购买 nike

我想使用枚举中声明的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);
}
}

最佳答案

您的问题标题是:

getting values from enum fields

但这就是您的问题:您没有从枚举字段获取值。您应该使用:

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

不是,

Dimension.getValue()

这具有完全不同的含义。

<小时/>

顺便说一句,就我自己而言,我会避免在任何地方调用 setSize(...) ,而是会使用组件的首选大小。如果需要精确指定或通过公式指定,那么我会重写其 getPreferredSize() 方法。

<小时/>

另一方面,我会避免提供与核心 Java 类名称冲突的类、接口(interface)或枚举名称。例如,我会将 Dimension 重命名为 GuiDimension 或类似名称。

<小时/>

编辑

请注意,使用此枚举:

public enum Fubar {
FOO, BAR
}

Fubar.FOO 和 Fubar.BAR 不是“静态字段”。它们是枚举 Fubar 的常量实例。我认为您可能对这个概念感到困惑。

<小时/>

编辑2
您声明:

well, i have to explain much better my problem, you don't understand... I know that being enum HEIGHT and WIDTH are not static members, but if you put them in any class and you want these two fields are used by other classes, will surely have to be initialized private static int height = 400 .... to prevent this I adopted the enum.

  1. 我仍然不明白是什么阻止您直接使用枚举实例,正如我在本答案开头发布的那样。
  2. 对象的状态由其字段的状态定义,可以与其他对象共享,而无需将任何字段设为静态。这就是 getter 方法的用途。
  3. 您没有提到为什么其他类需要知道这些字段的值。您可能有一个XY Problem在这里。

The problem of my question was that i couldnt get access to the values of these enum

这又令人困惑。可以按照上述方式获取值:Dimension.WIDTH.getValue()Dimension.HEIGHT.getValue()。您的问题表明您认为必须传入实例变量并且不能直接使用枚举,这就引出了为什么的问题。

关于java - 从枚举字段获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22425712/

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