2017-07-03 6 views
0

EDIT: À partir de IntelliJ version 2017.2, ce problème a été corrigé.La référence du constructeur est incorrectement marquée comme erreur dans IntelliJ 2017.1.4


version Java: 1.8.0_131

IntelliJ IDEA version: 2017.1.4

J'ai cette classe:

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); 
    } 
} 

Avec javac, il compile bien et fonctionne très bien. Avec IntelliJ, il compile bien et fonctionne très bien, cependant la référence constructeur TreeMap::new est soulignée en rouge et le message Bad return type in method reference: cannot convert java.util.TreeMap<K, V> to T est affiché sur l'info-bulle hover.

Est-ce que quelqu'un sait comment désactiver ce message d'erreur trompeur et ennuyeux sans désactiver les messages d'erreur importants et pertinents? Est-ce un bug? Si oui, où puis-je le signaler?

+1

Vous devez le signaler à eux, ici https://youtrack.jetbrains.com/issues/IDEA Titre suggéré "Bon code rouge: la référence du constructeur ne peut pas être déduite". –

+1

c'est * certainement * quelque chose à rapporter à IDEA car il compile très bien (sans avertissements) avec les JDK 8-131, 9-157 et le dernier eclipse - ce sont ceux que j'ai essayés. – Eugene

+0

@Ryan Signalé [ici] (https://youtrack.jetbrains.com/issue/IDEA-175280) –

Répondre

2

Ceci est causé par Intellij ne peut pas déduire le TreeMap<K,V> type générique, vous pouvez définir explicitement le type K, V pour résoudre cet avertissement, comme:

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

Merci, je ne savais pas ces références de méthode permettaient des paramètres de type génériques explicites. –