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

标签 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()
        );
    }

实际上,情况更糟,因为我混淆了类和方法名称。

我使用构建器模式来生成客户端,我的第一个想法是首先生成三个客户端,然后在构造函数调用中传递变量。

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

最佳答案

我看到的唯一直接选项:创建执行部分构造操作的小辅助方法,例如:

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/

相关文章:

javascript - 如何为 JavaScript 函数提供特定上下文而不立即调用它

java - 查找字典中最长单词的代码的时间复杂度

java - 使用java防篡改Excel文档

java - 将日历日期转换为字符串?

java - 本地主机上的服务器 tomcat v8.0 服务器无法启动

c# - 如果重写的方法返回不同的值,是否违反了里氏原则?

Perl OO 框架和程序设计 - Moose 和 Conway 的由内而外的对象 (Class::Std)

Angular 子类模板访问父类(super class)中定义的变量

c# - 在 C# 中使用 'new' 修饰符

java - application.jar 中没有主要 list 属性