我正在将程序从JavaScript翻译成Java SE。
我在JavaScript中找到了这个声明:
var ROAD = {
LENGTH: { NONE: 0, SHORT: 25, MEDIUM: 50, LONG: 100 },
CURVE: { NONE: 0, EASY: 2, MEDIUM: 4, HARD: 6 }
};
我用以下Java类翻译它:
public class Road {
public static final LengthLevel LENGTH = new LengthLevel();
public static final CurveLevel CURVE = new CurveLevel();
}
class LengthLevel {
public static final int NONE = 0,
SHORT = 25,
MEDIUM = 50,
LONG = 100;
}
class CurveLevel {
public static final int NONE = 0,
EASY = 2,
MEDIUM = 4,
HARD = 6;
}
我从Netbeans 8收到了几个警告:
a)在类Road中,警告是“通过公共API导出非公共类型”。
b)在其他地方使用常数时,例如
Road.LENGTH.MEDIUM
警告是“访问静态字段MEDIUM”和“替换为类引用”。
现在,我理解了警告的含义。我知道如果在自己的文件中将LengthLevel和CurveLevel都声明为public,它们将会消失。
因此,我的具体问题是翻译原始Javascript语句的方式是否较为冗长。
谢谢,
答案 0 :(得分:0)
您可以使用enums:
public class Road {
public enum LENGTH {
NONE(0), SHORT(25), MEDIUM(50), LONG(100);
private final int length;
LENGTH(int length) {
this.length = length;
}
public int getValue() {
return length;
}
}
public enum CURVE {
NONE(0), EASY(2), MEDIUM(4), HARD(6);
private final int curve;
CURVE(int curve) {
this.curve = curve;
}
public int getValue() {
return curve;
}
}
}
然后,您可以使用以下方法调用来访问该值:
int longLength = Road.LENGTH.LONG.getValue();
答案 1 :(得分:0)
我想如果你真的喜欢以与Javascript中相同的方式引用这些值,你可以做这样的事情(它的优秀代码是否是另一个问题):
public class Road {
public static final _LENGTH LENGTH = new _LENGTH();
private static class _LENGTH {
public static final int NONE = 0;
public static final int SHORT = 25;
public static final int MEDIUM = 50;
public static final int LONG = 100;
}
public static void main(String[] args) {
// Example access
System.out.println(Road.LENGTH.LONG);
}
}