我有以下單元測試:@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!"; }}當(dāng)我在 Foo 類中公開 getHello() 方法時,此測試通過。當(dāng)我將其保留為私有時,測試失敗,因為我只能假設(shè)私有方法未正確委派。甚至可以將私有方法委托給另一個類嗎?
1 回答

呼喚遠(yuǎn)方
TA貢獻(xiàn)1856條經(jīng)驗 獲得超11個贊
不它不是。Byte Buddy 像javac一樣生成字節(jié)碼,并且該字節(jié)碼必須有效才能運行。您不能從另一個類調(diào)用私有方法,因此,Byte Buddy 會拋出異常。
添加回答
舉報
0/150
提交
取消