枚举类型功能的扩大
Java赋予了enum强大的力量,把他当一个类来使用了,可以添加方法和构造函数等等强大的功能
Java programming language enum types are much more powerful than their counterparts in other languages. The enum declaration defines a class (called an enum type). The enum class body can include methods and other fields. The compiler automatically adds some special methods when it creates an enum. For example, they have a static values method that returns an array containing all of the values of the enum in the order they are declared. This method is commonly used in combination with the for-each construct to iterate over the values of an enum type. For example, this code from the Planet class example below iterates over all the planets in the solar system.
for (Planet p : Planet.values()) {
System.out.printf("Your weight on %s is %f%n",
p, p.surfaceWeight(mass));
}
--------------------------------------------------------------------------------
Note: All enums implicitly extend java.lang.Enum. Since Java does not
support multiple inheritance, an enum cannot extend anything else.
--------------------------------------------------------------------------------
In the following example, Planet is an enum type that represents
the planets in the solar system. They are defined with constant
mass and radius properties.
Each enum constant is declared with values for the mass and radius
parameters. These values are passed to the constructor when the
constant is created. Java requires that the constants be defined first,
prior to any fields or methods. Also, when there are fields and methods,
the list of enum constants must end with a semicolon.
--------------------------------------------------------------------------------
Note: The constructor for an enum type must be package-private or
private access. It automatically creates the constants that are defined
at the beginning of the enum body. You cannot invoke an enum
constructor yourself.
--------------------------------------------------------------------------------
In addition to its properties and constructor, Planet has methods that
allow you to retrieve the surface gravity and weight of an object on
each planet. Here is a sample program that takes your weight on
earth (in any unit) and calculates and prints your weight on all of the
planets (in the same unit):
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),
PLUTO (1.27e+22, 1.137e6);
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) {
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));
}
}
If you run Planet.class from the command line with an argument of 175,
you get this output:
$ java Planet 175
Your weight on MERCURY is 66.107583
Your weight on VENUS is 158.374842
Your weight on EARTH is 175.000000
Your weight on MARS is 66.279007
Your weight on JUPITER is 442.847567
Your weight on SATURN is 186.552719
Your weight on URANUS is 158.397260
Your weight on NEPTUNE is 199.207413
Your weight on PLUTO is 11.703031
推荐文章 |
