简体   繁体   中英

Enum types Java

I'm learning Java from the book "The Java Tutorial" 6th edition. There is an example with Enum class types which is the following:

public enum Planet {
    MERCURY (3.303e+23, 2.4397e6),
    VENUS   (4.869e+24, 6.0518e6),
    EARTH   (5.976e+24, 6.37814e6),
    MARS    (6.421e+23, 3.3972e6),
    JUPITER (1.9e+27,   7.1492e7),
    SATURN  (5.688e+26, 6.0268e7),
    URANUS  (8.686e+25, 2.5559e7),
    NEPTUNE (1.024e+26, 2.4746e7);

    private final double mass;   // in kilograms
    private final double radius; // in meters
    Planet(double mass, double radius) {
        this.mass = mass;
        this.radius = radius;
    }
    private double mass() { return mass; }
    private double radius() { return radius; }

    // universal gravitational constant  (m3 kg-1 s-2)
    public static final double G = 6.67300E-11;

    double surfaceGravity() {
        return G * mass / (radius * radius);
    }
    double surfaceWeight(double otherMass) {
        return otherMass * surfaceGravity();
    }
    public static void main(String[] args) {
        if (args.length != 1) {
            System.err.println("Usage: java Planet <earth_weight>");
            System.exit(-1);
        }
        double earthWeight = Double.parseDouble(args[0]);
        double mass = earthWeight/EARTH.surfaceGravity();
        for (Planet p : Planet.values())
           System.out.printf("Your weight on %s is %f%n",
                             p, p.surfaceWeight(mass));
    }
}

The problem is that I haven't understood the purpose of the lines:

private double mass() { return mass; }
private double radius() { return radius; }

I don't see any specific purpose of those two methods unless they're defined using public access modifier because you can use the two fields mass and radius in other methods. Even eclipse showed warnings on those 2 methods and suggested to remove them because they were never used locally. Even if you use those two methods locally(inside the enum) their purpose is not specific and the same can be achieved by using the private fields available. But as I said in my comment, make the two methods public if you want to access them outside your enum. Take a look at the screenshot below.

Eclipse警告

I have a question for you. I don't understand the purpose of main method inside the enum.

The purpose of the mass() and radius() methods is to retrieve the property from each Enum type in order to calculate a Planet surface gravity. They are made private in order to prevent access to these immutable (final) properties.

The Enum encapsulates these properties, but allows you to obtain each enumerated Planet's surface gravity as a calculated value derived from these private attributes.

UPDATE: I forgot to mention that in this example, they are not used.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM