在lambda中进行转换,在IntelliJ中标记为冗余

Gui*_*ino 5 lambda intellij-idea java-8

我正在编写一个小框架,需要instanceof用来知道传递哪种类型的回调.我已经知道了instanceof它的缺点,但它在第三方库中使用,我不能改变那部分.

在编写lambdas并进行转换时,IntelliJ警告我,转换是多余的,但实际上它是需要的(它会影响结果),并且如果我明确声明lambda它就可以工作.你知道这是不是一个bug,也许我错过了什么或有更好的方法来做到这一点?

例:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

Casted to A: IfaceA 
Casted to B: IfaceB 
Not Casted: Iface 
Declared as A: IfaceA
Run Code Online (Sandbox Code Playgroud)

但是在IntelliJ中我收到了警告:

在此输入图像描述

在此输入图像描述

还测试了javac,我没有得到任何警告:

 % javac Main.java -Xlint                                                                                                                                                                          !2525
Run Code Online (Sandbox Code Playgroud)

Voj*_*cka 4

在 Intellij 2016.1.1(截至 3 月 29 日构建 145.597)中,没有显示警告。您可能使用的是较旧版本的 Idea,此后问题已得到解决。

在此输入图像描述