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

在Java中对动态加载的类进行子类化,java,reflection,Java,Reflection,假设我通过使用Class.forName(“Foo”)动态加载一个类,获得了一个Class对象Foo是抽象的,因此我无法对其调用newInstance()。(如何)可以声明Foo的具体子类吗?您声明它不是抽象的,例如 class Bar extends Foo { // implement methods are required. } 简而言之,动态加载类并不意味着规则会更改;) Foo在编译时不可用 如果在编译时没有可用的Foo,那么仍然需要创建该类的一个子类。要做到这一点,你有两

假设我通过使用
Class.forName(“Foo”)
动态加载一个类,获得了一个
Class
对象<在本例中,code>Foo是抽象的,因此我无法对其调用
newInstance()
。(如何)可以声明
Foo
的具体子类吗?

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

class Bar extends Foo {
    // implement methods are required.
}
简而言之,动态加载类并不意味着规则会更改;)

Foo在编译时不可用

如果在编译时没有可用的Foo,那么仍然需要创建该类的一个子类。要做到这一点,你有两个选择

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

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

Foo
在编译时不可用,因此我无法编写上述代码。编译器抱怨:“找不到符号:class Foo”。@badweather,这只是一个例子。您必须先声明
Foo
class。@坏天气我根据您的评论添加了详细信息。@Peter,谢谢您的详细回答。我确信
Foo
不存在具体的子类。所以我想我必须生成代码。