枚举创建和包含对象java

时间:2014-10-19 20:46:32

标签: java enums

我有一个名为Planet的类,它创建具有某些属性的Planet对象。我可以拥有存储和创建行星的枚举(不习惯它们)吗?例如:

public enum planetEnum{
    earth (250, 0, 100, "blue"),
    mars (360, 0, 80, "red");

    planetEnum(double distance, double angle, double diameter, String col){
        new Planet(distance, angle, diameter, col);
    }
}

希望最后我可以将火星和地球称为物体,即:earth.getDistance()

我希望它清楚:) 提前谢谢!

修改:感谢您的回复。我已经发现并阅读了枚举上的oracle tut,但我找不到我真正想要的东西。因为学习继承的基础是一项任务,我需要将Planet类分开并创建Planet对象,所以我实际上不能将构造函数放在枚举中。有没有办法从枚举内部引用Planet类并从中创建?

再次感谢!

3 个答案:

答案 0 :(得分:1)

是的,但您并不真正需要Planet类,因为您可以在PlanetEnum中定义所有相同的字段和方法。唯一的区别是enum具有一组预定义的实例,您无法创建更多实例。

答案 1 :(得分:0)

是的,这是可能的。枚举很棒,因为它们可以保证像单身人士一样行事。但是,您必须确保所有行星都在所需的列表中,因为您无法添加任何行星。额外的缺点是,你必须硬编码所有固定数字和属性,如距离,颜色等......

如果您想轻松访问Planet类课程,您可以制作地图并将其存储在那里。然后你可以做类似的事情:

PLANETS.get("mars").getDistance();

答案 2 :(得分:0)

是的,有可能,请查看该链接http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

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));
    }
 }

如果从参数为175的命令行运行Planet.class,则会得到以下输出:

$ 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

«上一页