【发布时间】:2016-04-28 11:17:35
【问题描述】:
我正在编写一个小框架,它需要使用instanceof 来知道正在传递哪种类型的回调。 instanceof的缺点我已经知道了,但是它是在第三方库中使用的,我无法更改那部分。
在编写 lambda 并对其进行转换时,IntelliJ 警告我转换是多余的,但实际上它是必需的(它会影响结果),如果我明确声明 lambda,它就会起作用。你知道这是否是一个错误,也许我错过了一些东西或者有更好的方法来做到这一点?
例子:
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);
}
}
输出是:
Casted to A: IfaceA
Casted to B: IfaceB
Not Casted: Iface
Declared as A: IfaceA
但在 IntelliJ 中我收到警告:
还测试了 javac,我没有收到任何警告:
% javac Main.java -Xlint !2525
【问题讨论】:
-
你点击了那个
more…链接吗? -
仅供参考,我对 Eclipse (Mars.2) 没有任何警告。
-
@Holger,只是“这个检查报告了不必要的演员表。”
-
@Tunaki,谢谢,我已经测试过了,javac 也没有警告
-
你用的是什么版本的idea?
标签: intellij-idea lambda java-8