Eclipse生成setter

时间:2010-11-17 05:31:23

标签: java eclipse eclipse-3.6

在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 个答案:

答案 0 :(得分:2)

这在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

答案 1 :(得分:2)

我认为cat,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/ {/;

我在名为Device的类上运行它。

以下是产生的输出:

  

myObj.setId(ID);
  myObj.setNativeId(nativeId);
  myObj.setManufacturer(制造商);
  myObj.setModel(模型);
  myObj.setCapabilities(列表功能);

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

我认为编写Eclipse插件是一个完美但过于昂贵的解决方案。

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

答案 2 :(得分:0)

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