0

如果这是我的枚举:

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

4 回答 4

2

不,这对于枚举的 Java 表示是不可能的。我个人觉得Planet.MERCURY.mass()更具可读性。

我想到的唯一稍微增加可读性的事情是制作质量public final而不是private final参考,Planet.MERCURY.mass但我会再考虑一下。

于 2012-06-05T08:55:26.070 回答
0

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

public static class Planet {
    public static final double MERCURY = 3.303e+23;
}

现在您可以获得价值:

Planet.MERCURY

但是据我所知,使用枚举是不可能的。

于 2012-06-05T08:57:41.570 回答
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,...)。

于 2012-06-05T09:14:30.890 回答
0

您也可以将质量作为字符串返回,但它仅适用于字符串连接和期望字符串作为参数的方法,例如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()方法是一种更具可读性/可维护性的解决方案

此外,您可以避免使用枚举、声明常量容器类,如下所示:

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 作为双精度

于 2012-06-05T13:26:04.677 回答