亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

字節好友 - 如何委托私有方法?

字節好友 - 如何委托私有方法?

蝴蝶刀刀 2023-03-09 10:22:20
我有以下單元測試:@Testpublic void TestPrivateMethodDelegation() throws InstantiationException, IllegalAccessException, IllegalArgumentException,     InvocationTargetException, NoSuchMethodException, SecurityException{    Foo foo = new ByteBuddy()        .subclass(Foo.class)        .method(named("getHello")            .and(isDeclaredBy(Foo.class)            .and(returns(String.class))))        .intercept(MethodDelegation.to(new Bar()))        .make()        .load(Foo.class.getClassLoader(), ClassReloadingStrategy.fromInstalledAgent())        .getLoaded()        .getDeclaredConstructor().newInstance();    Method privateMethod = Foo.class.getDeclaredMethod("getHello");    privateMethod.setAccessible(true);    assertEquals(privateMethod.invoke(foo), new Bar().getHello());}這是它使用的類:@NoArgsConstructorpublic class Foo {    @SuppressWarnings("unused")    private String getHello()    {        return "Hello Byte Buddy!";    }}@NoArgsConstructorpublic class Bar {    public String getHello()    {        return "Hello Hacked Byte Buddy!";    }}當我在 Foo 類中公開 getHello() 方法時,此測試通過。當我將其保留為私有時,測試失敗,因為我只能假設私有方法未正確委派。甚至可以將私有方法委托給另一個類嗎?
查看完整描述

1 回答

?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

不它不是。Byte Buddy 像javac一樣生成字節碼,并且該字節碼必須有效才能運行。您不能從另一個類調用私有方法,因此,Byte Buddy 會拋出異常。



查看完整回答
反對 回復 2023-03-09
  • 1 回答
  • 0 關注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號