gpt4 book ai didi

java - 创建带有计算值的枚举

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

我使用以下代码并在计算枚举内的值时出现错误:

enum elPosition {
p1(
(boxX*0 + boxX/2),
(boxY*0 + boxY/2)
),
p2(
(boxX*1 + boxX/2),
(boxY*1 + boxY/2)
),
p3(
(boxX*2 + boxX/2),
(boxY*2 + boxY/2)
);

private double xPosition;
private double yPosition;

elPosition(final double xPosition, final double yPosition) {
this.xPosition = xPosition;
this.yPosition = yPosition;
}

private static final double boxX = 10;
private static final double boxY = 10;

public double getXPosition() {
return xPosition;
}

public double getYPosition() {
return yPosition;
}
}

如果使用某个值而不是计算,则不会发生错误。

最佳答案

我想说“非法前向引用”是一个足够清晰的错误消息,其中包含了阻碍的内容。

为了尝试防止滥用黑客代码,Java 完全不允许您在声明变量之前访问变量。

但是,由于这些变量是常量,它们的值在编译时计算,并且它们声明的顺序实际上并不重要。 Java 并没有改变其一般规则来允许您在这种特定情况下执行此操作。

我解决这个问题的一种方法是调用私有(private)静态方法来获取值:

enum ElPosition {
P1(
(boxX() *0 + boxX() /2),
(boxY() *0 + boxY() /2)
),
P2(
(boxX() *1 + boxX() /2),
(boxY() *1 + boxY() /2)
),
P3(
(boxX() *2 + boxX() /2),
(boxY() *2 + boxY() /2)
);

private double xPosition;
private double yPosition;

ElPosition(final double xPosition, final double yPosition) {
this.xPosition = xPosition;
this.yPosition = yPosition;
}

private static final double BOX_X = 10;
private static final double BOX_Y = 10;

private static double boxX() {
return BOX_X;
}

private static double boxY() {
return BOX_Y;
}

public double getXPosition() {
return xPosition;
}

public double getYPosition() {
return yPosition;
}
}

关于java - 创建带有计算值的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57785376/

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