Как я могу подавить ссылку на метод rawType?

У меня метод выглядит так.

public <E extends Enum<E> & Some> void setOther(final E some) {
    setOther(ofNullable(some).map(e -> e.name()).orElse(null);
}

Теперь IntelliJ предлагает использовать ссылку на метод для части e -> e.name().

И я изменил его.

public <E extends Enum<E> & Some> void setOther(final E some) {
    setOther(ofNullable(some).map(Enum::name).orElse(null);
}

Теперь компилятор жалуется на это.

... ....java:nnn: warning: [rawtypes] found raw type: Enum
        setOther(ofNullable(some).map(Enum::name).orElse(null));
                                      ^

Установка @SuppressWarnings({"uncheked"}) не работает.

Как я могу устранить это? Должен ли я придерживаться e -> e.name()?


person Jin Kwon    schedule 31.01.2018    source источник
comment
Какой компилятор и версию используете? И, пожалуйста, включите точное предупреждение. Возможно, это исходит даже не от компилятора, а от другого инструмента проверки исходного кода, который вы установили. Javac 1.8.0_131 и компилятор Java Eclipse 4.7.2RC2 не генерируют никаких предупреждений для вашего кода. (Они изначально показывают ошибки, потому что в первых двух фрагментах кода отсутствует закрывающая скобка ).)   -  person Erwin Bolwidt    schedule 31.01.2018
comment
Тогда должно быть Some::name?   -  person user7    schedule 31.01.2018
comment
И в любом случае, если предупреждение для [rawtypes], вы должны использовать @SuppressWarnings("rawtypes")   -  person Erwin Bolwidt    schedule 31.01.2018
comment
Optional не является общей заменой if/else. Вы можете записать этот метод как setOther(some != null ? some.name() : null);, что, на мой взгляд, более читабельно. И это полностью устранит проблемы с дженериками.   -  person VGR    schedule 31.01.2018
comment
@user7 Some — это интерфейс.   -  person Jin Kwon    schedule 31.01.2018
comment
@ErwinBolwidt Я получил это предупреждение с Gradle 4.4.1 и JDK 1.8.0_161.   -  person Jin Kwon    schedule 31.01.2018
comment
Хотя это можно обойти с помощью E::name, я считаю это предупреждение ошибкой компилятора. См. также этот ответ.   -  person Holger    schedule 21.02.2018


Ответы (1)


Изменять

.map(Enum::name)

To

.map(E::name)
person Anton Tupy    schedule 31.01.2018
comment
О Боже. Я никогда не знал этого! - person Jin Kwon; 31.01.2018