我正在玩Java的Reflection。我有一个带构造函数的抽象类Base
。使用反射从抽象基类访问构造函数
abstract class Base {
public Base(String foo) {
// do some magic
}
}
我还有一些课程延伸到Base
。它们不包含太多逻辑。我想用Base
的构造函数实例化它们,而不必在这些派生类中编写一些代理构造函数。当然,我想用Reflection来实例化这些派生类。说:
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
任何想法,我怎么能实例化与基的构造函数的派生类?或必须我声明那些愚蠢的代理构造函数?
在实例化这些类之前,你确定一切都在编译? – gabuzo 2011-01-13 16:54:34
是的,它编译得很好。这是一个简化的例子,它缺少这些catch-clause,但基本上这些代码编译得很好。啊,`Base`有一个额外的空默认构造函数(javac坚持)。 – craesh 2011-01-13 17:04:29