java - 使用计算值创建枚举
问题描述
我使用以下代码并在计算枚举中的值时出错:
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;
}
}
如果使用某个值而不是计算,则不会发生错误。
解决方案
我会说“非法前向引用”是一个足够清晰的错误消息,其中包含了正在发生的事情。
为了防止滥用hacky代码,Java完全不允许您在声明变量之前访问它们。
碰巧的是,由于这些变量是常量,它们的值是在编译时评估的,它们的声明顺序实际上并不重要。Java 只是没有弯曲其一般规则以允许您在这种特定情况下这样做。
我解决它的一种方法是调用私有静态方法来获取值:
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;
}
}
推荐阅读
- python-3.x - 如何使用 Python 作为实时数据流将 CSV 文件记录逐条记录发送到 Azure 事件中心
- r - 未来帧的多项式曲线拟合
- css - 如何在材料中并排对齐两个 ng-select 组件
- ros - Rospy message_filter ApproximateTimeSynchronizer 问题
- docker - Docker 由 nginx、express、letsencrypt SSL 组成 502 Bad gateway
- docker - Vue UI 无法通过 docker-compose
- laravel - “找不到类 'App\Game\User'”即使更改了提供程序
- javascript - 构建一个忽略空格的动态正则表达式
- bash - 使用 CURL 将特殊字符作为 HTTP POST 传递
- ruby-on-rails - 无法让用户确认使用设计在生产中工作