Reputation: 177
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; }
Upvotes: 1
Views: 821
Reputation: 2343
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.
I have a question for you. I don't understand the purpose of main method inside the enum.
Upvotes: 2
Reputation: 6168
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.
Upvotes: 0