2016-04-28 14 views
5

Sto scrivendo un piccolo framework che deve utilizzare instanceof per sapere quale tipo di callback viene passato. Conosco già gli svantaggi di instanceof, ma è utilizzato in una libreria di terze parti e non posso modificare quella parte.Casting in lambdas, contrassegnato come ridondante in IntelliJ

Durante la scrittura di lambda e il loro casting, IntelliJ mi avverte che il casting è ridondante, ma in realtà è necessario (influenza il risultato) e funziona se dichiaro esplicitamente il lambda. Sai se questo è un bug, forse mi manca qualcosa o c'è un modo migliore per farlo?

Esempio:

public class Main { 

    public interface Iface { 
     String run(); 
    } 

    public interface IfaceA extends Iface { 
    } 

    public interface IfaceB extends Iface { 
    } 

    public static void lambdaTest(Iface iface) { 
     System.out.print(iface.run()+": "); 
     if (iface instanceof IfaceA) { 
      System.out.println("IfaceA"); 
     } else if (iface instanceof IfaceB) { 
      System.out.println("IfaceB"); 

     } else { 
      System.out.println("Iface"); 

     } 
    } 

    public static void main(String[] args) { 
     lambdaTest((IfaceA)() -> "Casted to A"); 
     lambdaTest((IfaceB)() -> "Casted to B"); 
     lambdaTest(() -> "Not Casted"); 

     IfaceA lambda =() -> "Declared as A"; 
     lambdaTest(lambda); 
    } 
} 

e l'uscita è:

Casted to A: IfaceA 
Casted to B: IfaceB 
Not Casted: Iface 
Declared as A: IfaceA 

Ma in IntelliJ ottengo l'avvertimento:

enter image description here

enter image description here

testati anche javac e non ho ricevuto alcun avvertimento:

% javac Main.java -Xlint                                           !2525 
+1

Hai fatto clic su questo collegamento tutto ... ''? – Holger

+2

Per la cronaca, non ho alcun avviso con Eclipse (Mars.2). – Tunaki

+0

@Holger, solo "Questa ispezione riporta espressioni di cast non necessarie." –

risposta

4

In Intellij 2016/01/01 (build 145,597 a partire dal 29 marzo) non viene visualizzato alcun avviso. Probabilmente stai usando una versione precedente di Idea e il problema è stato risolto da allora.

enter image description here

+0

Grazie, stavo usando la versione 143.1821.5 e Android Studio. Ho scaricato l'ultima versione di IntelliJ e funziona :) –