我的一个类中的构造函数调用如下所示:
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()
);
}
实际上,情况更糟,因为我混淆了类和方法名称。
我使用构建器模式来生成客户端,我的第一个想法是首先生成三个客户端,然后在构造函数调用中传递变量。
但是,由于这发生在构造函数中,因此对此的调用必须是第一个语句。有什么我可以做的吗?
最佳答案
我看到的唯一直接选项:创建执行部分构造操作的小辅助方法,例如:
private AnotherClass makeAnotherClass() {
return new Client.ClientBuilder(AnotherClas.get(YetAnotherClass.class).getA(),
AnotherClas.get(YetAnotherClass.class).getBt()))
.withF(YetAnotherClass.class).build());
如果没有办法摆脱复杂性,那么至少将其转换为更容易理解的“格式”。
上面的内容更容易 - 因为您减少了所需的行数。这意味着您的大脑可以更轻松地创建一个“上下文”来“嵌入”代码。这听起来可能是一件小事,但我们的大脑一直在这样做。他们试图抽象以创造“意义”和“分类”。因此,一组命名良好的小方法比在一个方法中具有相同的内容要更好。
当然,您现在可以将构造函数调用更改为类似的内容
this(makeAnotherClass(), makeYetAnotherClass() ...
是的,这会产生“开销”,因为您现在有更多方法;并且它们可能只被调用一次。但仍然:它允许您坚持 Single Layer of Abstraction原则。遵循这个原则肯定会提高代码的可读性。
关于java - 如何摆脱 this() 构造函数中的长调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45188163/