使用反射在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