[英]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.