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

时间:2012-12-06 14:45:28

标签: java reflection

假设我通过使用Class动态加载类来获取Class.forName("Foo")对象。在这种情况下,Foo是抽象的,因此我无法在其上调用newInstance()。 (如何)可以声明Foo的具体子类?

1 个答案:

答案 0 :(得分:1)

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

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

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

  

Foo在编译时不可用

如果在编译时没有Foo,则仍需要具有此类的子类,这是创建它的具体方法。要做到这一点,你有两个选择。

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

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