第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用字節(jié)好友對具有強制轉(zhuǎn)換的參數(shù)調(diào)用方法

使用字節(jié)好友對具有強制轉(zhuǎn)換的參數(shù)調(diào)用方法

翻翻過去那場雪 2022-09-22 10:25:58
我對Byte Buddy非常陌生,我正在嘗試使用它來創(chuàng)建在對象上執(zhí)行g(shù)etter方法的接口的實現(xiàn)。我的界面看起來像這樣:public interface Executor {    Object execute(final Object target);}這個想法是,如果我有一個類,如:public class User {   ...   public String getName() { return this.name; }   public String getSurname() { return this.surname; }}我需要能夠創(chuàng)建一個接口的實現(xiàn),該方法假設(shè)是一個并調(diào)用它,然后是另一個對 執(zhí)行相同操作的實現(xiàn),依此類推。因此,等效的 java 代碼將是:Executorexecute(obj)objUsergetName()getSurname()public class MyHypotheticalByteBuddyExecutorImpl implements Executor {    @Override    Object execute(final Object target) {        return ((User) target).getName();    }}因此,我們的想法是能夠為類 + getter 的任意組合創(chuàng)建如上所示的類,就像在本例中 + .UsergetName()我(認為我)知道如何讓Byte Buddy創(chuàng)建一個幾乎做到這一點的類:final Method nameMethod = User.class.getMethod("getName", null);final Class<?> myHypotheticalByteBuddyExecutorImpl =    new ByteBuddy()        .subclass(Object.class)        .implement(Executor.class)        .method(ElementMatchers.named("execute"))            .intercept(MethodCall.invoke(nameMethod).onArgument(0))        .make()        .load(ByteBuddyTest.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)        .getLoaded();...但后來字節(jié)好友正確地拋出了一個異常,說我不能在 .因此,我假設(shè)我缺少演員陣容:getName()Object((User) target)Exception in thread "main" java.lang.IllegalStateException: Cannot invoke public java.lang.String com.example.User.getName() on class java.lang.Object    at net.bytebuddy.implementation.MethodCall$TargetHandler$ForMethodParameter$Resolved.toStackManipulation(MethodCall.java:2527)    at net.bytebuddy.implementation.MethodCall$Appender.toStackManipulation(MethodCall.java:3541)    at net.bytebuddy.implementation.MethodCall$Appender.apply(MethodCall.java:3502)    ...我相信這可以被定義為一個(我可能完全錯了),就像這樣:StackManipulationfinal StackManipulation typeCasting =    TypeCasting.to(TypeDescription.ForLoadedType.of(User.class));但是,我無法在 Byte Buddy API 的任何地方找到如何在執(zhí)行 getter 之前將此強制轉(zhuǎn)換(或我可能需要強制轉(zhuǎn)換的任何其他代碼)應(yīng)用于方法的參數(shù)。execute(Object)我該如何實現(xiàn)這一點?
查看完整描述

1 回答

?
catspeake

TA貢獻1111條經(jīng)驗 獲得超0個贊

這應(yīng)該通過使用動態(tài)類型來工作,您可以通過以下方式進行配置:

MethodCall.invoke(nameMethod)
  .onArgument(0)
  .withAssigner(Assigner.DEFAULT, Assigner.Typing.DYNAMIC);

堆棧操作用于創(chuàng)建自定義字節(jié)代碼,我不認為這是您要在此處執(zhí)行的操作。


查看完整回答
反對 回復 2022-09-22
  • 1 回答
  • 0 關(guān)注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號