我使用以下代码并在计算枚举内的值时出现错误:
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/