簡體   English   中英

用字節伙伴從字符串覆蓋類方法?

[英]Override a class method from a string with byte-buddy?

假設我有以下課程(或者也可以通過接口來完成?):

class MyCustomClass {
    boolean myCustomMethod(int a, int b){}
}

和以下字符串:

Math.abs(a - b) >= 10;

使用Byte Buddy,是否可以使用方法myCustomMethod將字符串中的代碼注入到MyCustomClass的新子類中? 即使在之前使用ANTLR處理了String?

所以我得到

class MyCustomClass_SubClassInstance extends MyCustomClass {
    // I know that with ByteBuddy, all this "ceremonial" code is not needed.
    boolean myCustomMethod(int a, int b){
         Math.abs(a - b) >= 10; // Injected code from the string
    }
}

我認為您走錯了路。 為什么要使用ByteBuddy生成類代碼?

而是:使用JavaCompiler功能簡單地將該類構建為Java源-然后對其進行編譯,然后使用“動態”編譯的類。

含義:您在某種程度上使事情變得過於復雜。 您實際上知道您最終想要得到什么-因此將其創建為java源代碼,並以編程方式轉向javac以將其轉換為字節碼。

對於Android,可以使用JavaSourceToDex類。

這不是Byte Buddy背后的想法。 Byte Buddy做這種事情的方式是實現一個類,該類提供要調用的方法,然后生成一個代理,以從檢測類型委托給該方法調用。

Javassist提供了這樣的功能性但性能方面的考慮,在運行時編譯字符串並不是很好,因此我將不惜一切代價避免這種情況。 特別是在通常資源有限的Android上。 類生成是相當昂貴的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM