代码之家  ›  专栏  ›  技术社区  ›  Damo

Eclipse生成setter

  •  1
  • Damo  · 技术社区  · 15 年前

    在Eclipse中,有没有什么方法可以给一个类提供一个已定义setter的列表,以便在填充它们之前将它们列出?

    例如:

    public class Test {
      private String valueA;
      private String valueB;
      private String valueC;
      private String valueD;
    
      public void setValueA(String val) {
        this.valueA = val;
      }
      public void setValueB(String val) {
        this.valueB = val;
      }
      public void setValueC(String val) {
        this.valueC = val;
      }
      public void setValueD(String val) {
        this.valueD = val;
      }
    }
    

    使用模板/快捷方式输出将非常方便:

    test.setValueA(value);
    test.setValueB(value);
    test.setValueC(value);
    test.setValueD(value);
    

    显然,4个字段的值不在这里,但是当您有100个字段时,这个值会很好(想想JAXB Bean对于一个讨厌的XML片段)。

    注意 :我不是问 Source -> Generate Getters / Setters 菜单。

    谢谢。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Sean Patrick Floyd    15 年前

    我认为猫、grep和sed的简单组合可能对你有用。

    下面是我在半分钟内写的一个例子:

    cat Device.java  | grep "public void set" | sed 's/.*public void /myObj./' | sed 's/int\|long|boolean\|float\|double\|String//' | sed 's/( /(/' | sed 's/ {/;
    

    我在我的类设备上运行它。

    以下是生产的产品:

    肌球蛋白(id);
    肌瘤;
    myObj.setManufacturer(制造商);
    肌瘤模型(模型);
    myObj.setCapabilities(列出能力);

    如您所见,它适用于所有原语,但最后一个setter需要一些修改。这是因为sed命令不支持全套正则表达式运算符。欢迎使用perl或awk。在这种情况下,你可以简单地说 s/\(\S+ // ,即删除左括号后面的所有非空白字符以及其后的空格。

    我认为编写Eclipse插件是一个完美但代价太高的解决方案。

    我在这里使用了Unix shell命令。如果你运气不好:(像我一样在Windows上开发)我建议你使用cygwin(和我一样)。

        2
  •  2
  •   VonC    15 年前

    这在Eclipse中是不可能的,但肯定可以在插件中完成。

    例如 plugin fluent-builder 你可能会感兴趣:

    当在单元测试中实例化数据对象时,Fluent构建器特别方便

    List<Movie> movies = Arrays.asList(
                MovieBuilder.movie().withTitle("Blade Runner")       // <- here's the builder used
                                    .withAddedActor("Harrison Ford")
                                    .withAddedActor("Rutger Hauer")
                            .build(),
                MovieBuilder.movie().withTitle("Star Wars")          // <- ... and also here
                                    .withAddedActor("Carrie Fisher")
                                    .withAddedActor("Harrison Ford")
                            .build());
    

    该插件允许您使用以下wizzard为每个setter生成此类测试代码:

    alt text

        3
  •  0
  •   Stephen C    15 年前

    我不知道有什么特别的。但是,类大纲视图非常接近,特别是当您调整过滤器以排除您不感兴趣的内容(例如字段、静态成员、嵌套类)时。