>假设我通过使用Class.forName("Foo")
动态加载类来获取Class
对象。 在这种情况下,Foo
是抽象的,所以我不能打电话给newInstance()
。(如何)是否可以声明Foo
的具体子类?
你声明它不是抽象的,例如
class Bar extends Foo {
// implement methods are required.
}
简而言之,仅仅因为您动态加载了类并不意味着规则会更改;)
Foo 在编译时不可用
如果你在编译时没有可用的Foo,你仍然需要这个类的一个子类,它是具体的来创建它。 为此,您有两种选择。
- 找到一个具体的类并创建它。 可以使用反射库查找此类。
- 生成代码并使用 Compiler API 或 BeanShell 编译它。
- 使用 ObjectWeb 的 ASM 为子类生成字节代码。
我怀疑第一个选项是你需要的,因为除非为你提供了一个子类,否则你仍然需要为抽象方法生成代码。