Java构造函数模式

Java构造函数模式,java,guice,Java,Guice,我经常使用这种模式: class Blah int a; double b; String c; Date d; public Blah(int a, double b, String c, Date d) { super(); // possibly this.a = a; this.b = b; this.c = c; this.d = d; } 对于如此简单的事情,这

我经常使用这种模式:

class Blah
  int a;   
  double b;   
  String c;   
  Date d;   

  public Blah(int a, double b, String c, Date d) {
      super(); // possibly   
      this.a = a;   
      this.b = b;
      this.c = c;
      this.d = d;
  }
对于如此简单的事情,这确实是一个很大的样板。我想用一个通用的对象工厂来进行内省,但这感觉非常糟糕(特例、继承和速度问题)。可以使用Guice,构造函数也可以完全跳过,但是手动创建对象会很难看

这是我在Java中必须接受的东西,还是有办法避免这个样板文件?

尝试使用Lombok()


你只需要注释就可以生成getter、setter和constructor。

我不太清楚你的问题是什么。确实有很多样板代码,但是Eclipse可以在眨眼之间生成:)是的,我们在Java中使用这种样板。关于“Eclipse可以为你生成它”的争论只能由初学者来阐述。重构、重命名参数变量、更改属性类型、getter/setter排序、格式设置等等。当您必须检查setter中到底发生了什么,但将注意力集中在37个其他变量中正确的一个上是一场噩梦时,调试又如何呢?等等,@VladimirMatveev Scala和几乎所有其他在太阳底下的语言:)我一直在想,如果你完全不进行验证,那么为私人成员使用getter和setter有什么意义?为什么不只让公共成员参与(当字段也是最终字段时更是如此)?我知道您正在将实现与接口分离,但是如果setter和getter直接链接到成员变量名,那么这就有点违背了目的,不是吗?@Supericy完全同意这一点。我在一份如此回答中多次主张这一立场,结果往往以反对票告终。他们的论点是:所有关于“验证”的标准废话,这在现实中从未发生过,子类“凌驾”一个setter,等等@Supericy不,这并没有违背目的。getter和setter让您有机会在以后添加验证或功能,或者使用接口或使用代理或。。。我目前与公共成员在一个环境中工作,他们已经成为一个主要的PITA…@Nicktar大多数现代框架也处理公共领域(例如Spring和Hibernate)。但我很想听听你在公共领域的真实经历。我个人从未遇到过将验证插入setter而不是单元测试或bean验证方案的情况。@Supericy,MarkoTopolnik你说得太对了。当你努力使你的对象不可变时,公共领域尤其引人注目。顺便说一句,Lombok的缺点是它只能在Eclipse中使用。在使用IntelliJ IDEA之后,Eclipse本身不是很有用。。。