3

我需要在 Android 的运行时创建一个扩展抽象类的类。我真正需要的是生成这样的东西:

Class A extends AbstractClass{

    A(){
         super("A name that is saved on AbstractClass");
         fieldFromAbstractClass =...
    }

    @Override
    public void aMethodFromAbstractClass(){
       //some code....
    }
}

我想在运行时生成它。这可能吗?

4

2 回答 2

4

在“传统”Java 中,您可以在运行时创建和编译类,或者使用 ASM 等字节码生成器来扩充或生成类文件。

但是,您需要记住,Android不是Java 虚拟机。当您创建一个 APK 时,类文件被转换成专门的字节码,由 Android 的 Dalvik 虚拟机处理。

我不知道 Dalvik 特定的运行时字节码生成器,所以我不相信(目前)可以做你描述的事情。

编辑

有一个名为Dexmaker的库可以完成此任务。我从这个相关的答案中发现了它。

于 2012-05-20T16:35:59.697 回答
0

您可以创建A一个匿名内部类。但是,您不能提供新的构造函数。对于您的示例,请定义fieldFromAbstractClassAbstractClass提供 getter 和 setter。

    AbstractClass a = new AbstractClass() {
        @Override
        public void aMethodFromAbstractClass() {
           // ...
        }
    }
    a.setFieldFromAbstractClass( someValue );
// do something with A

如果声明为 final,您还可以从内部类的包含块中引用变量。有关更多信息,我建议阅读一些 Java 教程或书籍。

于 2012-05-20T16:35:43.440 回答