如何摆脱this()构造函数中的长调用?

时间:2017-07-19 10:42:13

标签: java oop

我的一个类中的构造函数调用如下所示:

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模式生成客户端,我的第一个想法是首先生成三个客户端,然后在构造函数调用中传递变量。

但是,由于这发生在构造函数中,因此对此的调用必须是第一个语句。我有什么可以做的吗?

1 个答案:

答案 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原则。遵循这一原则绝对可以提高代码的可读性。