在Android中在运行时创建一个类

时间:2012-05-20 16:18:36

标签: java android class runtime

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

Class A extends AbstractClass{

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

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

我想在运行时生成此内容。这可能吗?

2 个答案:

答案 0 :(得分:4)

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

但是,您需要记住,Android 不是 Java虚拟机。创建APK时,类文件将转换为由Android的Dalvik虚拟机处理的专用字节码。

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

修改

有一个名为Dexmaker的库,可能会实现此目的。我是从this related answer发现的。

答案 1 :(得分:0)

您可以将A设为匿名内部类。但是,您无法提供新的构造函数。对于您的示例,请在fieldFromAbstractClass中定义AbstractClass并提供getter和setter。

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

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