Methodenverweise auf schädliche Rohtypen?

Der folgende Code enthält einen Verweis aufEnum::name (Beachten Sie keinen Typparameter).

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 meldet eine Warnung während des Kompilierens:

[WARNUNG] Rohtyp gefunden: java.lang.Enum fehlende Typargumente für die generische Klasse java.lang.Enum

Ändern Sie den Ausdruck inEnum<T>::name bewirkt, dass die Warnung verschwindet.

Allerdings kennzeichnet Idea dasEnum<T>::name Version mit einer Warnung, dass:

Explizite Typargumente können abgeleitet werden

Eclipse (EuGH) meldet wiederum keine Probleme mit beiden Formulierungen.

Welche der drei Ansätze ist richtig?

inerseits sind Rohtypen ziemlich böse. Wenn Sie versuchen, ein anderes Typargument zu verwenden, z.Enum<Clause>::name führt dazu, dass die Kompilierung fehlschlägt und bietet zusätzlichen Schutz.

uf der anderen Seite ist der obige Verweis äquivalent zue -> e.name() Lambda, und für diese Formulierung sind keine Typargumente erforderlich.

Enviorment:

Java 8u91IDEA 15.0.3 CommunityECJ 4.5.2

Antworten auf die Frage(2)

Ihre Antwort auf die Frage