繁体   English   中英

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

[英]Creating a class in runtime in Android

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

Class A extends AbstractClass{

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

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

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

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

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

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

编辑

有一个名为Dexmaker的库,可以实现这一点。 我从这个相关的答案中发现了它。

您可以使A成为匿名内部类。 但是,您不能提供新的构造函数。 对于您的示例,在AbstractClass定义fieldFromAbstractClass并提供一个 getter 和一个 setter。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM