如果这是我的枚举:
public enum Planet {
MERCURY (3.303e+23),
NEPTUNE (1.024e+26);
private final double mass; // in kilograms
Planet(double mass) {
this.mass = mass;
}
private double mass() {
return mass;
}
}
我可以访问像
这样的值Planet.MERCURY.mass();
是否有可能将枚举定义为“double”并让
Planet.MERCURY;
返回双倍?
无论如何,我主要对调用的外观感兴趣以确保代码可读性。
答案 0 :(得分:2)
没有。对于枚举的Java表示,这是不可能的。我个人觉得Planet.MERCURY.mass()
更具可读性。
我脑海中唯一能够略微提高可读性的是制作质量public final
而不是private final
并参考Planet.MERCURY.mass
,但我会再考虑一下。
答案 1 :(得分:0)
您可以定义类而不是枚举:
public static class Planet {
public static final double MERCURY = 3.303e+23;
}
现在你可以获得价值:
Planet.MERCURY
但据我所知,就枚举而言,这是不可能的。
答案 2 :(得分:0)
如果您对外观感兴趣,那么我强烈建议您使用Planet.MERCURY.mass()
的当前实施。你无法获得更多可读性。我也倾向于尽可能地缩短代码。但多年来我发现这只会引入更多问题。如果你想在长公式中使用大量的水银,你想保持一定的可读性,你可以在本地做
double mMerc = Planet.MERCURY.mass();
// other local temp variables
double distance = Math.sqrt(G*mMerc*mRocket/F);
左右。这种方法还可以让你以后很容易地添加更多的常量(比如distanceToSun,surfaceTemperature,eccentricity,albedo,......)。
答案 3 :(得分:0)
此外,您可以将质量作为字符串返回,但它只能用于字符串连接和期望String作为参数的方法,例如System.out.println()
或String.format()
public enum Planet {
MERCURY (3.303e+23),
NEPTUNE (1.024e+26);
private final double mass; // in kilograms
Planet(double mass) {
this.mass = mass;
}
private double mass() {
return mass;
}
public String toString() {
return String.valueOf(mass);
}
}
我同意之前的回答/评论,即详细.mass()
方法是一种更具可读性/可维护性的解决方案
另外,你可以避免使用enum,一个declare constans容器类,如下所示:
public class Planet {
public final static double MERCURY = 3.303e+23;
public final static double NEPTUNE = 1.024e+26;
// ....
// Make 'Planet' not easily instantiable for others
private Planet() {}
}
并且像这样你可以使用Planet.MERCURY作为双重而没有问题