如何整理子类的构造函数?

问题描述 投票:0回答:1

我有一个带有 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
但不起作用。

java design-patterns lombok
1个回答
0
投票

一种选择是将参数分组到一个或多个单独的类中,并将它们传递到构造函数中。 在您的示例中,看起来像这样:

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); }

如果从用户代码调用构造函数,这些将工作得最好。 如果您使用依赖注入来创建这些对象,这将是乏味的。

© www.soinside.com 2019 - 2024. All rights reserved.