java - 是否可以从多类中的构造函数重定向实例?

标签 java class constructor this


我正在检查传递到多类构造函数中的 boolean 条件,如果为 true,我实际上是在尝试将 this 分配给子类的实例。

这当然行不通,那么有没有办法以这种方式重定向实例呢?如果没有办法的话,原因是什么?


这是多类:

public class MultiClass {

    String str;

    public MultiClass(boolean flag) {
        if (flag) {

            // doesn't work! wish it would:
            // this = new ExtraClass();

        } else {
            this.str = "you are in the first class";
        }
    }
} // end of MultiClass

class ExtraClass {

    String str;

    ExtraClass() {
        this.str = "you are in the second class";
    }
} // end of ExtraClass


...以及测试器类:

public class MultiClassTest {

    public static void main(String[] args) {
        MultiClass test = new MultiClass(false);
        System.out.println(test.str);
    }
} // end of MultiClassTest


最佳答案

您可以使用工厂方法,例如一个静态方法,它可以返回任何实现来创建不同的实现,或者使用委托(delegate)来委托(delegate)给实际的实现。 (构造的类只是一个包装器)

注意:构造函数不会创建实例,它只会初始化为您创建的实例。一旦创建,您就无法更改其类型。

<小时/>

一种更简单的方法是使用一个类来检查标志以确定它应该做什么。 (在代码中使用 if 语句)

public class MultiClass {
    final String str;

    public MultiClass(boolean flag) {
        if (flag) {
            this.str = "you are in the second class";
        } else {
            this.str = "you are in the first class";
        }
    }
}

关于java - 是否可以从多类中的构造函数重定向实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16371467/

相关文章:

python - 理解上下文管理器类中返回 self 的目的

java - 为什么在枚举构造函数中创建的所有枚举值数组中的最后一个枚举为空?

c++ - 在执行不平凡的构造函数之前引用成员

C++ 将二进制数组转换为类

java - Gson 不将 JSONarray 元素转换为类对象

C++继承问题错误C2084函数已经有一个主体

java - 处理 BlockingQueue 中的所有元素

java - 如何将 x 的值从小到大排列?

java - 在解析之前重写 solr 查询

java - 将位图图像转换为文件并传递给 FileInputStream?