【问题标题】:Auto-generate lambda expression as argument in IntelliJ在 IntelliJ 中自动生成 lambda 表达式作为参数
【发布时间】:2018-03-24 20:35:50
【问题描述】:

如何让 IntelliJ 自动生成 lambda 表达式作为传递的参数?

我想要什么:

我已经看到了问题How to autocomplete lambdas in IntelliJ IDEA?,但这似乎并没有产生我想要的结果。

【问题讨论】:

  • 为什么要在代码中进行类型转换?这是不必要的。
  • @yole (a) 我认为您的查询与问题无关,但也许我误解了。 (b) 这是由 IntelliJ 在我输入 new Clic(或类似的)后创建的。 IntelliJ 2018.3 提供了帮助程序将该部分转换为各种形式。我不在乎我得到哪种形式,我只是不想输入侦听器样板。在我的第一个屏幕截图中,您可以看到 IntelliJ 知道应该传递 ClickListener。我希望为我提供 一些 ClickListener。我会对 IntelliJ 可以自动创建的 ClickListener 实现的 any 语法形式感到满意。
  • 括号内的 Ctrl+Shift+Space 不适合您吗?对我来说,它建议 event -> {} 非常接近您想要的结果。

标签: intellij-idea lambda autocomplete


【解决方案1】:

正如 Tagir Valeev 在他的评论中已经提到的那样,IntelliJ 将自动生成 lambda 代码,但前提是您的 ClickListener 是一个(功能性)接口。

例如:

@FunctionalInterface
interface ClickListener {
  void listen();
}

class Clicker {
   void addClickListener(ClickListener listener){
      // ...
   }
}

然后,Intellij 在按下 Ctrl+Shift+Space 时建议

注意:至于@FunctionalInterface注解,Jav Doc表示

此注释不是编译器将接口识别为功能接口的要求

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多