Метод ссылок на необработанные типы вреден?
Код ниже содержит ссылку наEnum::name
(обратите внимание на отсутствие параметра типа).
public static <T extends Enum<T>> ColumnType<T, String> enumColumn(Class<T> klazz) {
return simpleColumn((row, label) -> valueOf(klazz, row.getString(label)), Enum::name);
}
public static <T, R> ColumnType<T, R> simpleColumn(BiFunction<JsonObject, String, T> readFromJson,
Function<T, R> writeToDb) {
// ...
}
Javac сообщает о предупреждении во время компиляции:
[ПРЕДУПРЕЖДЕНИЕ] обнаружил необработанный тип: java.lang.Enum пропущенные аргументы типа для универсального класса java.lang.Enum
Изменение выражения наEnum<T>::name
вызывает предупреждение, чтобы уйти.
Однако идея помечаетEnum<T>::name
версия с предупреждением, что:
Явные аргументы типа могут быть выведены
В свою очередь, Eclipse (ECJ) не сообщает о проблемах ни с одной из формул.
Какой из трех подходов является правильным?
С одной стороны, сырые виды довольно противные. Если вы попытаетесь ввести другой аргумент типа, например,Enum<Clause>::name
приведет к сбою компиляции, так что это дополнительная защита.
С другой стороны, приведенная выше ссылка эквивалентнаe -> e.name()
лямбда, и эта формулировка не требует аргументов типа.
Enviorment:
Java 8u91Сообщество IDEA 15.0.3ECJ 4.5.2