Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > что делает valueOf(String) из enum-а?


Автор: Dims 2.4.2008, 09:45
В любом enum-е есть такие методы, как values() и valueOf(). Где посмотреть по ним справку? F1 отсылает к javadoc-у по конкретному классу. В частности, что делает valueOf()? Что является строковым представлением элемента enum-а? Его имя в Java или его представление по методу toString()?

Автор: SoulKeeper 2.4.2008, 09:57
Код

public class Demo {

    public Demo() {
        MyEnum e = MyEnum.valueOf("enum1");

        System.out.println(e.toString());

        for(MyEnum e2 : MyEnum.values()){
            System.out.println(e2);
        }
    }

    public static void main(String[] args) {
        new Demo();
    }

    private enum MyEnum {

        enum1,
        enum2,
        enum3
    }
}


http://java.sun.com/javase/6/docs/api/java/lang/Enum.html

Автор: Dims 2.4.2008, 18:40
Но по приведённой Вами ссылке нет описания, например, метода values(). valueOf тоже не совсем такой прототип имеет.

Автор: COVD 2.4.2008, 19:25
Станет понятнее, если вспомнить, что элементом enum может быть не только строка, но и более сложный обьект. Это иллюстрировано примером в http://java.sun.com/docs/books/tutorial/java/javaOO/enum.html . 

Метод values() возвращает коллекцию обьектов  (в примере - Planet[]) . Эти обьекты могут иметь геттеры и сеттеры, т.е. туда можно положить или извлечь данные уже после обьявления enum.

Метод valueOf("..имя..") вернет один обьект, т.е. можно например получить параметр обьекта: double mass = Planet.valueOf("MERCURY").mass; 

valueOf() - это как get() в HashMap. 


Код

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)