使用反射在Abstract类中创建实例

可以使用反射在抽象祖先类中创建派生类的实例吗?

abstract class Base {

public Base createInstance(){

//using reflection

Class<?> c = this.getClass();

Constructor<?> ctor = c.getConstructor();

return ((Base) ctor.newInstance());

}

}//end Base

class Derived extends Base {

main(){

new Derived().createInstance()

}

}

回答:

你可以这样做

public class Derived extends Base {

public static void main(String ... args) {

System.out.println(new Derived().createInstance());

}

}

abstract class Base {

public Base createInstance() {

//using reflection

try {

return getClass().asSubclass(Base.class).newInstance();

} catch (Exception e) {

throw new AssertionError(e);

}

}

}

版画

Derived@55fe910c

一种更常见的模式是使用Cloneable

public class Derived extends Base {

public static void main(String ... args) throws CloneNotSupportedException {

System.out.println(new Derived().clone());

}

}

abstract class Base implements Cloneable {

@Override

public Object clone() throws CloneNotSupportedException {

return super.clone();

}

}

版画

Derived@8071a97

但是,应避免使用两者之一。通常,还有另一种方法可以满足您的需求,因此基础不会隐式地依赖于派生。

以上是 使用反射在Abstract类中创建实例 的全部内容, 来源链接: utcz.com/qa/408290.html

回到顶部