【问题标题】:Eclipse: How to automatically generate getter when adding a field?Eclipse:添加字段时如何自动生成getter?
【发布时间】:2012-06-04 16:40:52
【问题描述】:

我正在使用 TDD,并且有一个非常典型的编码模式,在我编写单元测试代码时使用 Eclipse 自动创建方法和字段。例如:

  1. 不存在的方法的类型名称,例如:

    myObj.setValue(someValue);

  2. 点击IDE中的红色小错误标记,创建“setValue”方法。

  3. 在 setValue 方法中输入:

    public void setValue(String value) { this.value = value; }

  4. 点击红色错误标记自动创建私有字段(本例中称为“值”);

所以在这一点上,我希望 Eclipse 自动创建 getter 方法,而不必使用 source -> generate getter and setter 菜单。

我看到了这个问题:How do you force Eclipse to prompt you to create a getter and setter when it doesn't do it automatically,这似乎暗示 Eclipse 会这样做,但我找不到在哪里配置它。

有没有办法配置 Eclipse 在添加新的私有变量时自动添加 setter/getter?

更新: 为了进一步澄清,我正在寻找我在Spring Roo 文档中看到的内容。如果您查看“工作原理”部分,它描述了框架如何在您添加私有变量时自动向您的类添加其他方法。 (但是,我的偏好是不运行另一个类似的进程,也不要得到它似乎添加的所有内容)。我希望 Eclipse 也有类似的东西。

【问题讨论】:

  • 出于好奇,如果您使用 TDD,为什么要在需要之前创建 getter?但是如果你把光标放在 set 方法之后(或之前),写 get 然后 control-space 你应该得到一个关于 getter 的建议(不完全是你要求的)。
  • @RogerLindsjö:这实际上是一个好问题。主要答案是:我在我的 Preferences/Save Actions 中添加了“删除未使用的私有类型”的操作,所以当我保存时(当我运行单元测试看到它失败时会发生这种情况),Eclipse将删除我刚刚创建的字段(因为它尚未被引用),让我再次重新输入它。所以似乎最好的流程是在那一刻创建吸气剂。另外 - 通常我发现如果我创建一个 setter,我通常稍后需要 getter,所以无论如何我在创建 setter 时创建它似乎也是一个很好的约定。
  • 这就解释了。也有这个设置,但不喜欢它,所以现在我将未使用的私有成员作为警告,并在提交之前将警告保持为零(但在工作期间接受它们)。

标签: java eclipse


【解决方案1】:

当您将鼠标移到变量名称上方时,您可以在弹出菜单中选择“为 varname 创建 getter 和 setter”。

或者您可以为自己创建一个快捷方式来执行此操作。首选项 -> 常规 -> 键。在搜索框中输入“getter”,然后您就会找到它。

【讨论】:

  • 至少在 Eclipse Helios 中,如果您在将鼠标移到变量上时已经创建了 setter,则无法选择创建 getter 和 setter。
【解决方案2】:

试试这个,效果像黄油

Go to Source --> Generate Getter and Setter Methods

Either select one instance variable, or all ---> Ok

【讨论】:

    【解决方案3】:

    我的做法有些不同。

    • 首先创建变量:(比如private int threadsInPool = 3)。
    • 将光标放在变量名上(比如threadsInPool
    • 应用这个快捷键:Alt + Shift + s, r (按最后一个r 之后 稍有延迟)
    • Generate Getters and Setters 对话框出现时,只需按 Enter 键,瞧!

    编辑: 你也可以尝试使用Lombok注解:

    @Getter @Setter private String value;
    

    【讨论】:

      【解决方案4】:

      嗯...不知道这是否是您要查找的内容,但是如果我在类中创建一个字段,则会警告该字段未使用。如果我单击警告标志,则会出现为该字段生成 getter 和 setter 的选项:

      【讨论】:

        【解决方案5】:

        我认为这个问题并不意味着,因为所有答案都给出了手动解决方案。

        AFAIK 没有插件就不可能自动完成,我不知道有什么插件可以做到。

        我使用模板一次性创建类似的工件,但我不遵循相同的路径——如果 getter 或 setter 已经存在,我不确定模板解决方案是否有效,因为我不是确保您可以检查方法的存在并据此做出模板决策。也许你可以。

        【讨论】:

          猜你喜欢
          • 2010-11-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-25
          • 1970-01-01
          • 1970-01-01
          • 2011-12-15
          • 2018-01-08
          相关资源
          最近更新 更多