【问题标题】:Casting in lambdas, marked as redundant in IntelliJ转换为 lambda,在 IntelliJ 中标记为冗余
【发布时间】: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


【解决方案1】:

在 Intellij 2016.1.1(截至 3 月 29 日的内部版本 145.597)中没有显示警告。您可能正在使用旧版本的 Idea,并且从那时起该问题已得到修复。

【讨论】:

  • 谢谢,我使用的是 143.1821.5 版本和 Android Studio。我下载了最新版本的 IntelliJ,它可以工作了 :)
猜你喜欢
  • 1970-01-01
  • 2021-02-26
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
相关资源
最近更新 更多