帮助Java中的枚举

时间:2010-04-15 17:41:25

标签: java enums

是否可以让枚举更改其值(来自内部)?也许更容易理解代码的含义:

enum Rate {
    VeryBad(1),
    Bad(2),
    Average(3),
    Good(4),
    Excellent(5);

    private int rate;

    private Rate(int rate) {
        this.rate = rate;
    }

        public void increateRating() {
            //is it possible to make the enum variable increase?
            //this is, if right now this enum has as value Average, after calling this
            //method to have it change to Good?
       }
}

这是我想要实现的目标:

Rate rate = Rate.Average;
System.out.println(rate); //prints Average;
rate.increaseRating();
System.out.println(rate); //prints Good

由于

4 个答案:

答案 0 :(得分:11)

是。你可以直接打电话

rate = Rate.Good;

针对这个具体案例。但我认为你真正想要的是继任功能。

Here你是:

public class EnumTest extends TestCase {
    private enum X {
        A, B, C;
        public X successor() {
                return values()[(ordinal() + 1) % values().length];
        }
    };

    public void testSuccessor() throws Exception {
        assertEquals(X.B, X.A.successor());
        assertEquals(X.C, X.B.successor());
        assertEquals(X.A, X.C.successor());
    }
}

答案 1 :(得分:2)

你想要这样的东西吗?

class Rate {
    private static enum RateValue {
        VeryBad(1),
        Bad(2),
        Average(3),
        Good(4),
        Excellent(5);

        private int rate;

        public RateValue(int rate) {
            this.rate = rate;
        }

        public RateValue nextRating() {
            switch (this) { /* ... */ }
        }
    }

    private RateValue value;

    public void increaseRating() {
        value = value.nextRating();
    }
}

答案 2 :(得分:2)

问题中的示例尝试通过调用方法来更改“rate”的值。这是不可能的,枚举值是对象,因此您无法更改它们的原因与您无法为“this”分配新值的原因相同。您可以做的最接近的事情是添加一个返回另一个枚举值的方法,如Carl Manaster所建议。

答案 3 :(得分:-1)

应该可以,但我必须承认我从未尝试过。最后,枚举只是有点扭曲的对象,因此除非将速率字段定义为final,否则您应该能够这样做。