我有一个带有 10 个变量的抽象父类,在创建子类的对象时需要初始化这些变量。我正在使用
lombok
。
我的子类的构造函数如下所示:
ChildClassName(A a, B b, C c, D d, E e, F f, G g, H h, I i, J j) { super(a,b,c,d,e,g,f,h,i,j); }
这里看起来很简单,但是当用完整的类和变量名编写时,这个构造函数代码比子类中的其他代码涵盖更多行。有多个子类,所以我在所有子类中都有这样的构造函数。
我可以使用什么模式来让它变得更好?是否有
lombok
注释可以用来修复它?
我尝试使用
@SuperBuilder
中的 lombok
但不起作用。
一种选择是将参数分组到一个或多个单独的类中,并将它们传递到构造函数中。 在您的示例中,看起来像这样:
class SuperOptions {
A a;
B b;
C c;
D d;
E e;
F f;
G g;
H h;
I i;
J j;
}
ChildClassName(SuperOptions options) { super(options); }
如果子类需要传递给构造函数的其他内容,您可以为此添加一个参数,或者创建一个从 SuperOptions 派生的新类型并将其添加到那里
//new parameter
ChildClassName(SuperOptions options, ChildDependency k) { super(options); }
或者
//derive from SuperOptions
class ChildOptions extends SuperOptions {
ChildDependency k;
}
ChildClassName(ChildOptions options) { super(options); }
如果从用户代码调用构造函数,这些将工作得最好。 如果您使用依赖注入来创建这些对象,这将是乏味的。