2

假设我通过Class使用Class.forName("Foo"). Foo在这种情况下是抽象的,所以我不能调用newInstance()它。(如何)可以声明一个具体的子类Foo吗?

4

1 回答 1

1

你声明它不是抽象的,例如

class Bar extends Foo {
    // implement methods are required.
}

简而言之,仅仅因为您动态加载了类并不意味着规则会改变;)

Foo 在编译时不可用

如果您在编译时没有 Foo 可用,您仍然需要有一个此类的子类来具体创建它。为此,您有两个选择。

  • 找到一个具体的类并创建它。您可以使用Reflections库找到这样的类。
  • 生成代码并使用 Compiler API 或 BeanShell 对其进行编译。
  • 使用 ObjectWeb 的 ASM 为子类生成字节码。

我怀疑第一个选项是您需要的,因为除非为您提供子类,否则您仍然需要为抽象方法生成代码。

于 2012-12-06T14:48:35.810 回答