当前位置: 首页 > 知识库问答 >
问题:

SonarLint:将此匿名内部类设为lambda(非功能接口)

张嘉
2023-03-14

我正在运行SonarLint 3.4和Oracle JDK 8。SonarLint给我这个错误:

只包含一个方法的匿名内部类应成为lambdas(squid:S1604)

我无法控制的界面设置如下:

public interface Interface {
   static String staticMethodOne() {
      return "abc";
   }

   default String methodOne(String input) {
      return "one: " + input;
   }

   default String methodTwo(String input) {
      return "two: " + input;
   }
}

这是生成错误的代码:

public class Main {
   public static void main(String[] args) {
      callMethodOne(
         new Interface() {
            @Override
            public String methodOne(String input) {
               return ("override: " + input);
            }
         }
      );
   }

   private static void callMethodOne(Interface instance) {
      System.out.println(instance.methodOne("test"));
   }
}

由于“接口”不是功能接口,我看不到用lambda替换它的方法。这是SonarLint中的错误还是我错过了什么?

共有1个答案

师成弘
2023-03-14

确认为SonarJava中的一个bug;等待下一次Sonarint更新的时间。

https://jira.sonarsource.com/browse/SONARJAVA-2654

 类似资料:
  • 以下代码收到Sonarint的通知: 我尝试了以下内容,但在抛出新的IllegalArgumentException时遇到了问题: 你能建议一下吗?

  • 问题内容: 在进行一些基本的lambda练习时,一个看似完全相同的匿名内部类的输出给我的输出与lambda不同。 场景1 输出 2 和 2 。这里没有新内容。 但是当我这样做时: 场景2 输出 2 和 3 问题:两个输出不应该相同吗? 我想念什么吗? 为了完整起见: 方案3 输出 3 和 3 。这里也没有什么新鲜的。 更新:仍从1.8.0-b132获得相同的输出 更新#2:错误报告: https

  • 下面的代码可以工作,但我收到了SonarLint的通知,因为我在流中使用了匿名类而不是lambda表达式,我不知道如何改进下面的代码来避免通知: 代码解释:我使用java.util的属性类,不幸的是,属性的返回

  • 问题内容: 就在今天,我需要一种在不同对象之间传递函数的方法。我很快了解到您不能直接在Java中做到这一点,但是您可以传递一个wht实例,该实例显然被称为“匿名内部类”,如下所示: 定义类: 使其成为一个实例: 并称之为: 很简单。但是我不明白的是为什么它被称为“匿名”。我不只是给它起名字MyCallback吗?命名的东西不能匿名,对吗?请避免对这个术语感到困惑。 问题答案: 不,您说的是MyCa

  • 把一个匿名类转成内部类 操作步骤: 菜单栏: Refactor —> Convert Anonymous to Inner...

  • 问题内容: 在Java 8之前,可以通过使用匿名内部类来实现lambda功能。例如: 在性能方面,仍然使用这种方法和使用新的Java 8 lambda之间有区别吗? 问题答案: 甲骨文发布了一项研究,比较了Lambda和匿名类之间的性能 请参见Sergey Kuksenko撰写的JDK 8:Lambda性能研究 ,该幻灯片长74张。 简介:预热缓慢,但是当JIT内联时,最坏的情况与匿名类一样快,但