我有以下單元測試:@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 會拋出異常。
添加回答
舉報
0/150
提交
取消