在Java中如何创建与“this”类相同类型的新类? Java的

时间:2011-09-01 10:56:11

标签: java class instance

我有一个简单的场景。我想在下面创建一个新类的实例。

class A implements Fancy {
    void my() {
        Fancy b = // new X(); where X could be A or B
    }
}

当你有B时也会实现Fancy

4 个答案:

答案 0 :(得分:8)

使用abstract class AbstractFancy方法创建create

abstract class AbstractFancy implements Fancy {
    abstract Fancy create();

    void my() {
        Fancy b = create();
        //....
    }
}

在每个类中实现create方法:

class A extends AbstractFancy {
    Fancy create() {
        return new A();
    }
}
class B extends AbstractFancy {
    Fancy create() {
        return new B();
    }
}

答案 1 :(得分:3)

我假设您希望在基类中定义my(),如FancyAdapter,它具有不同的子类,并且您希望它创建实际具体子类的实例。如果您可以假设实现Fancy的所有类都具有默认(无参数)构造函数:

Fancy b = (Fancy) getClass().newInstance();

答案 2 :(得分:3)

class A implements Fancy {
    void my() {
        Fancy b = (Fancy)getClass().newInstance();
    }
}

答案 3 :(得分:2)

反思性? (不推荐)

Fancy b = this.getClass().newInstance();

如果存在基于零参数的构造函数(隐式或显式),这将起作用。确保在声明周围做try {} catch{}

其他方式:

class A implements Fancy, Cloneable {

    void my() {
        try {
            Fancy b = (Fancy) clone();
        } catch (CloneNotSupportedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

或者,您可能希望构建器创建新的Fancy对象。