【问题标题】:IntelliJ - is there an option to automatically add extra parameters to a constructor?IntelliJ - 是否有自动向构造函数添加额外参数的选项?
【发布时间】:2019-09-17 14:22:16
【问题描述】:

我正在向这个构造函数添加第三个参数(String?memberId),有谁知道 IntelliJ 如何或为什么不给我自动插入这个新的构造函数参数的选项?它可以做的最好的事情是更改下一个参数的类型,或者创建第二个构造函数,我认为这对 IntelliJ 来说应该是显而易见的,这些可能没有用。

【问题讨论】:

  • 我对 IntelliJ 不够熟悉,无法说出它是否可能(因此是评论,而不是答案)。但是您问为什么它不给您选择,我猜这是因为实现该功能的复杂性。假设您有MyConstructor(int i1, int i2),并且您提供了 3 个int 值,IntelliJ 将如何知道您希望新参数去哪里。它是在i1 之前、i1i2 之间还是在i2 之后插入它?
  • 另一个潜在问题是如果将参数添加到构造函数中,人们可能会假设代码中调用该构造函数的任何其他位置将被更新以包含新参数也是。但是,IntelliJ 不知道将什么值放入重构的构造函数调用中。不过,正如前面评论中提到的,我不知道这是否真的可能——如果是这样,这些 cmets 将无关紧要!
  • 我相信 IntelliJ 足够聪明,因为按 ctrl+f6 会弹出一个对话框以同样的方式更改签名,它会逐步让您选择新参数的默认值。但是,它会将该值分配给每个实例,而实际上它应该让您一次一步地遍历它们。也许这个功能不存在,但我很惊讶

标签: android-studio intellij-idea kotlin


【解决方案1】:

代码完成支持预期的功能。 memberId 参数应该在具有第一优先级的完成列表中。使用 'Ctrl+Space' 和 ',' 完成参数。这种行为对于其他类型的函数也是一样的(不仅是构造函数)。

注意:在 Java 的情况下没有这样的快速修复:

public class Test {
    private String s;
    private Integer n;

    Test(String s, Integer n) {
        this.s = s;
        this.n = n;
    }

    public Test foo() {
        return new Test(s); // there is no quick fox to add 'n' argument but it presents in completion
    }
}

仅供参考:当在使用站点添加参数但在声明站点尚未添加参数时,存在相反的情况。这是一张支持快速修复的票:https://youtrack.jetbrains.com/issue/KT-8478。 (已编辑)

【讨论】:

  • 谢谢,是的,看起来这张票实际上正是我所说的(但更简洁):)
  • 其实KT-8478的票是不同的。在您的情况下,您已经在方法(构造函数)声明中添加了参数,并期望有一个可用的快速修复来为方法(构造函数)用法添加参数。该功能没有票证,因为 Kotlin 和 Java 中的代码完成都已经支持它。当参数添加到方法使用中但方法声明中没有参数时,票证解决了相反的问题。这就是我在仅供参考部分添加它的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-26
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多