java - 调用类的参数化/默认构造函数?

标签 java

我有一个带有两个构造函数的类。

Class Sample{

  private ClassOne classOne;
  private ClassTwo classTwo;
  private ClassThree classThree;


  public Sample(){
    classOne = new ClassOne();
    classTwo = new ClassTwo();
    classThree = new ClassThree();
  }

  public Sample(int id){

    classOne = new ClassOne(id);
    classTwo = new ClassTwo(id);
    classThree = new ClassThree(id);

  }

  //some code here
}

有一个包含两个构造函数的 Sample 类。需要在示例类中实例化另外三个类(ClassOne、ClassTwo 和 ClassThree)。所有三个类都包含默认和参数化构造函数。如果调用 Sample 类的默认构造函数,则应调用 ClassOne、ClassTwo 和 ClassThree 的默认构造函数。 如果调用 Samples 参数化构造函数,则调用 ClassOne、ClassTwo 和 ClassThree 的参数化构造函数。

我在上面写了代码。有什么优雅的方法可以做到这一点吗?

最佳答案

假设您的 Sample 类中的 id 没有其他用途,您可以使用工厂方法模式:

class Sample {
    private ClassOne classOne;
    private ClassTwo classTwo;
    private ClassThree classThree;

    Sample(ClassOne classOne, ClassTwo classTwo, ClassThree classThree) {
        this.classOne = classOne;
        this.classTwo = classTwo;
        this.classThree = classThree;
    }

    public static Sample factory(int id) {
        ClassOne classOne = null;
        ClassTwo classTwo = null;
        ClassThree classThree = null;
        if ( id == -1 ) {
            classOne = new ClassOne();
            classTwo = new ClassTwo();
            classThree = new ClassThree();
        }
        else {
            classOne = new ClassOne(id);
            classTwo = new ClassTwo(id);
            classThree = new ClassThree(id);
        }
        return new Sample(classOne, classTwo, classThree);
    }
}

您的具体示例在其原始表述中可能更清晰,但这是将复杂的构造逻辑从构造函数中移出的好方法。

关于java - 调用类的参数化/默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16832996/

相关文章:

java - 在android studios和firebase实时数据库中,有什么函数可以获取某些特定数据所属的参数的名称?

java - JSP + JQuery UI 选择菜单 + 默认文本

java - 如何使用 Quarkus 在 RestEasy 中为 MultipartFormDataInput 提供 swagger 注释

java - 如何增加curl GET请求url大小限制?

java - 通过JDBC向PostgreSQL表中插入 "daterange"字段值

java - 如何将Java中的 native 查询结果转换为字符串?

java - Spring数据-@Modifying(clearAutomatically = true,flushAutomatically = true)导致另一个实体无法更新

SE7 或 SE8 的 Java FX

java - 如何使用 JTree 从文件创建 TreeView ?

java - OpenGL glBufferSubData - 无法让它工作