簡體   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