Справка с перечислениями в Java

Действительно ли возможно иметь изменение перечисления его значение (из себя)? Возможно, легче понять то, что я имею в виду с кодом:

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

Спасибо

6
задан devoured elysium 15 April 2010 в 17:41
поделиться

4 ответа

Да. В этом конкретном случае вы можете просто позвонить

rate = Rate.Good;

. Но я думаю, что вы действительно ищете функцию-преемницу.

Вот вы:

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());
    }
}
11
ответ дан 8 December 2019 в 17:19
поделиться

Хотите что-то подобное?

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
ответ дан 8 December 2019 в 17:19
поделиться

Пример в вопросе пытается изменить значение "rate", вызывая для него метод. Это невозможно, значения перечисления являются объектами, поэтому вы не можете их изменить по тем же причинам, по которым вы не можете присвоить новое значение «this». Ближайшее, что вы можете сделать, - это добавить метод, который возвращает другое значение перечисления, как предложил Карл Манастер.

2
ответ дан 8 December 2019 в 17:19
поделиться

Это должно быть возможно, но я должен признать, что никогда не пробовал. В конце концов, перечисления - это просто объекты с небольшим поворотом, так что вы сможете это сделать, если не определите поле скорости как окончательное.

-1
ответ дан 8 December 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: