2017-07-03 2 views
0

EDIT: Ab IntelliJ Version 2017.2 wurde dieses Problem behoben.Konstruktorreferenz inkorrekt markiert als Fehler in IntelliJ 2017.1.4


Java-Version: 1.8.0_131

IntelliJ IDEA Version: 2017.01.04

Ich habe diese Klasse:

public class MethodReferenceWithArguments { 

    static <T, U> T createWith(Function<? super U, ? extends T> methodRef, U arg) { 
     return methodRef.apply(arg); 
    } 

    public static void main(String[] args) { 

     Map<String, String> map = createWith(
       TreeMap::new, 
       Comparator.<String>reverseOrder()); 

     map.put("aaa", "ONE"); 
     map.put("zzz", "TWO"); 

     System.out.println(map); 
    } 
} 

Mit javac, kompiliert es fein und funktioniert einwandfrei. Mit IntelliJ kompiliert es gut und funktioniert gut, jedoch wird die TreeMap::new Konstruktorreferenz mit rot unterstrichen und Bad return type in method reference: cannot convert java.util.TreeMap<K, V> to T Nachricht wird auf Hover Tooltip angezeigt.

Kann jemand diese irreführende und nervige Fehlermeldung deaktivieren, ohne wichtige, relevante Fehlermeldungen auszuschalten? Ist das ein Fehler? Wenn ja, wo kann ich es melden?

+1

Sie sollten diese ihnen berichten, hier https://youtrack.jetbrains.com/issues/IDEA Vorgeschlagener Titel "Guter Code rot: Konstruktorreferenz kann nicht abgeleitet werden". –

+1

das ist * definitiv * etwas zu IDEA zu berichten, da es gut kompiliert (ohne Warnungen) mit JDK 8-131, 9-157 und neuesten Eclipse - das sind die, die ich ausprobiert habe. – Eugene

+0

@Ryan gemeldet [hier] (https://youtrack.jetbrains.com/issue/IDEA-175280) –

Antwort

2

Dies wird durch Intellij verursacht wird, kann die TreeMap<K,V> generische Typ nicht schließen, können Sie explizit die K, setzen V Art diese Warnung für die Lösung, wie:

Map<String, String> map = createWith(
      TreeMap<String, String>::new, 
      Comparator.<String>reverseOrder()); 
+0

Danke, wusste ich nicht Diese Methodenreferenzen erlaubten explizite generische Typparameter. –

Verwandte Themen