簡體   English   中英

使用字節伙伴從頭開始創建一個類及其方法

[英]Create a class and its methods from scratch using byte-buddy

是否可以使用 bytebuddy 在其中創建一個全新的類和方法?

我看到的所有示例都使用現有類或攔截現有方法來修改它們。

是否有任何示例通過bytebuddy 構造一個類並動態添加一些方法並返回該類的實例?

所有 Java 類都需要擴展另一個類,因此您至少需要擴展Object.class 使用接口或替換現有類中的方法,使它們可以在不大量使用反射的情況下使用,這就是許多人所做的。 但這不是必要的。

子類Object.class添加您的方法/字段並委托給您用 java 編寫的實際方法。 “Hello World”示例正是這樣做的。

Class<?> dynamicType = new ByteBuddy()
  .subclass(Object.class)
  .method(ElementMatchers.named("toString"))
  .intercept(FixedValue.value("Hello World!"))
  .make()
  .load(getClass().getClassLoader())
  .getLoaded();

assertThat(dynamicType.newInstance().toString(), is("Hello World!"));

Byte Buddy 可以創建動態方法主體,但在這種情況下,您基本上是編寫 java 匯編程序。 如果您需要這方面的幫助,您可能想就您想要創建的內容提出更具體的問題。

如果您可以將您的需求融入到 bytebuddy 的注釋/約定/攔截/委托方法中,我強烈建議您嘗試使用它。 您的代碼將是可調試的(您可以在委托中設置斷點)並且由知道如何編寫正確的 java 匯編程序(用於膠水的 javac 和字節伙伴)的人生成。

暫無
暫無

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

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