我的一个类中的构造函数调用如下所示:
API() {
this(
(new Client.ClientBuilder(AnotherClas.get(YetAnotherClass.class).getA(),
AnotherClas.get(YetAnotherClass.class).getBt()))
.withF(YetAnotherClass.class).build(),
(new Client.ClientBuilder(AnotherClas.get(YetAnotherClass.class).getA(),
AnotherClas.get(YetAnotherClass.class).getB())
.withE(AnotherClas.get(YetAnotherClass.class).getC())
.withD(AnotherClas.get(YetAnotherClass.class).getD())).build(),
(new Client.ClientBuilder(
AnotherClas.get(YetAnotherClass.class).getA(),
AnotherClas.get(YetAnotherClass.class).getB())
.withY(AnotherClas.get(YetAnotherClass.class).build()
);
}
实际上,情况更糟,因为我对类和方法名称进行了混淆。
我使用Builder模式生成客户端,我的第一个想法是首先生成三个客户端,然后在构造函数调用中传递变量。
但是,由于这发生在构造函数中,因此对此的调用必须是第一个语句。我有什么可以做的吗?
答案 0 :(得分:3)
我看到的唯一直接选项:创建构建部分的小辅助方法,例如:
private AnotherClass makeAnotherClass() {
return new Client.ClientBuilder(AnotherClas.get(YetAnotherClass.class).getA(),
AnotherClas.get(YetAnotherClass.class).getBt()))
.withF(YetAnotherClass.class).build());
如果无法获得摆脱的复杂性,那么至少将其转换为"格式"这更容易消化。
以上情况更容易 - 因为您减少了所需的行数。这意味着你的大脑可以更容易地创建一个" context"在其中"嵌入"码。这可能听起来像一个小东西 - 但我们的大脑正在不断地这样做。他们试图抽象,以创造" sense"并且"分类"。因此,与在一种方法中具有相同内容相比,一组名称很好的小方法更好。
当然,您现在可以将构造函数调用更改为
this(makeAnotherClass(), makeYetAnotherClass() ...
是的,这会产生"开销"因为你现在有更多的方法;他们可能只被召唤一次。但仍然:它允许你坚持Single Layer of Abstraction原则。遵循这一原则绝对可以提高代码的可读性。