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:
testati anche javac e non ho ricevuto alcun avvertimento:
% javac Main.java -Xlint !2525
Hai fatto clic su questo collegamento tutto ... ''? – Holger
Per la cronaca, non ho alcun avviso con Eclipse (Mars.2). – Tunaki
@Holger, solo "Questa ispezione riporta espressioni di cast non necessarie." –