Как мне написать универсальный ротатор перечисления Java?

Как создать универсальный ротатор перечисления? В этом примере это будет общая версия next () .

    public class TestEnum
    {
        enum Temperature { hot, cold };

        public static void main(String[] args)
        {
            Temperature t = Temperature.hot;
            Temperature t2 = next(t);
        }

        static Temperature next(Temperature t)
        {
            if (t.ordinal() == Temperature.values().length - 1)
                return Temperature.values()[0];
            else
                return Temperature.values()[t.ordinal() + 1];
        }
    }

Изменить: В комментариях @irreputable предлагает лучшее решение. бесспорно , если вы отправите его в качестве ответа, я выберу его. Возможно, вы захотите сэкономить время, скопировав этот ответ.

static <T extends Enum<T>> T next(T t)
{
    int index = t.ordinal();
    @SuppressWarnings("unchecked")
    Enum<T>[] constants = t.getClass().getEnumConstants();
    if (index == constants.length - 1)
    {
        @SuppressWarnings("unchecked")
        T result = (T)constants[0];
        return result;
    }
    else
    {
        @SuppressWarnings("unchecked")
        T result = (T)constants[index + 1];
        return result;
    }
}
12
задан H2ONaCl 21 February 2012 в 05:13
поделиться