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 finalPlanet.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()私は、冗長な方法がより読みやすく、保守しやすい解決策であるという以前の回答/コメントに同意します

また、次のように、enum、declareconstansコンテナクラスの使用を避けることができます。

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 に答える