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

时间:2012-06-05 08:53:30

标签: 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; 
    }
}

我可以访问像

这样的值
Planet.MERCURY.mass();

是否有可能将枚举定义为“double”并让

Planet.MERCURY;

返回双倍?

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

4 个答案:

答案 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作为双重而没有问题