在 Java 中对动态加载的类进行子类化



>假设我通过使用Class.forName("Foo")动态加载类来获取Class对象。 在这种情况下,Foo是抽象的,所以我不能打电话给newInstance()。(如何)是否可以声明Foo的具体子类?

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

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

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

Foo 在编译时不可用

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

  • 找到一个具体的类并创建它。 可以使用反射库查找此类。
  • 生成代码并使用 Compiler API 或 BeanShell 编译它。
  • 使用 ObjectWeb 的 ASM 为子类生成字节代码。

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

最新更新