Java 有没有办法让枚举返回不带方法的值

Java 有没有办法让枚举返回不带方法的值,java,enums,Java,Enums,如果这是我的枚举: 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 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;
返回一个双精度?


无论如何,我主要感兴趣的是调用的外观,以确保代码可读性。

否。这在枚举的Java表示中是不可能的。就我个人而言,我觉得Planet.MERCURY.mass()更具可读性


我想到的唯一一件稍微增加可读性的事情是使mass
公共最终版
而不是
私人最终版
,并参考
Planet.MERCURY.mass
,但我会重新考虑一下。

您可以定义类而不是枚举:

public static class Planet {
    public static final double MERCURY = 3.303e+23;
}
现在您可以获得以下值:

Planet.MERCURY

但就我所知,使用enum是不可能的。

如果您对外观感兴趣,那么我强烈建议您使用当前的Planet.MERCURY.mass()实现。你无法获得更多的可读性。我也倾向于尽量缩短代码。但多年来,我发现这只会带来更多的问题。如果你想在长公式中使用汞的质量,你想保持一定的可读性,你可以在本地这样做

double mMerc = Planet.MERCURY.mass();
// other local temp variables

double distance = Math.sqrt(G*mMerc*mRocket/F);

大概吧。这种方法还允许您以后非常轻松地添加更多常量(如distanceToSun、SurfacetTemperature、偏心率、反照率等)。

您也可以将质量作为字符串返回,但它仅适用于字符串串联和需要字符串作为参数的方法,如
System.out.println()
String.format()

我同意前面的回答/评论,即verbose
.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作为替身

,但如果只有一个参数,我只想修复一组对象并给它们“组”和“名称”,我不需要这些方法…@Wojtek最终公开有什么缺点?@Frank如果将来某个时候你会决定质量()应该还一些其他单位,而不是公斤。如果你有一个getter,你可以很容易地在方法体中实现该逻辑。@Wojtek我可以简单地添加另一个getter。。。但总的来说,我并不介意那些括号,我只是错过了通过调用object来获得值的可能性,我想到了这一点,但由于缺乏可用性(例如switch)而放弃了它
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() {}
}