Можно ли добавить дженерики в значения перечисления?Пример псевдокода включен - PullRequest
1 голос
/ 21 октября 2011

Можно ли добавить дженерики в значения перечисления?

Что-то похожее на этот псевдокод:

    public enum MyEnum<T> {

            VALUE1<String>,
            VALUE2<Boolean>;

            public T get() {
                    return (T) AnotherSystem.get(this); // Where AnotherSystem.get returns an Object
            }

    }

Я только что написал это неправильно, или это вообще невозможно?

Какие еще опции мне нужно, чтобы get () возвращала определенный универсальный тип (T)

Ответы [ 2 ]

4 голосов
/ 21 октября 2011

Вы можете сделать

        public <T> T get() {
                return (T) AnotherSystem.get(this); 
        }

Если вам нужно связать тип с перечислением, это может быть свойство

public enum MyEnum {

    VALUE1(String.class),
    VALUE2(Boolean.class);

    public final Class<?> type;
    MyEnum(Class<?> type){ this.type = type; }

    public <T> T get() {
        return (T) AnotherSystem.get(this, this.type);
    }

}

class AnotherSystem
{
    static<T> T get(MyEnum e, Class<T> type){ return null; }
}
1 голос
/ 21 октября 2011

Нет, я не верю, что подобное возможно.Если вы посмотрите на раздел 8.9 JLS , где указаны объявления enum, там нет ничего о дженериках:

Сравните его с "нормальным" объявлением класса в разделе 8.1 , где частью спецификации являются параметры типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...