【发布时间】:2011-01-13 16:46:31
【问题描述】:
我正在玩 Java 的反射。我有一个带有构造函数的抽象类Base。
abstract class Base {
public Base( String foo ) {
// do some magic
}
}
我还有一些扩展Base 的课程。它们不包含太多逻辑。我想用Base 的构造函数来实例化它们,而不必在这些派生类中编写一些代理构造函数。当然,我想用反射实例化那些派生类。说:
Class cls = SomeDerivedClass.class;
Constructor constr;
constr = cls.getConstructor( new Class[] { String.class } ); // will return null
Class clsBase = Base.class;
constr = clsBase.getConstructor( new Class[] { String.class } ); // ok
Base obj = (Base) constr.newInstance( new Object[] { "foo" } ); // will throw InstantiationException because it belongs to an abstract class
任何想法,我如何用 Base 的构造函数实例化派生类?或者必须我声明那些愚蠢的代理构造函数?
【问题讨论】:
-
在实例化这些类之前,你确定一切都在编译吗?
-
是的,它编译得很好。这是一个简化的示例,它缺少那些 catch 子句,但基本上这段代码编译得很好。啊,
Base有一个额外的空默认构造函数(javac 坚持这样做)。
标签: java reflection constructor