Java Byte Buddy-如何委托私有方法?
我有以下单元测试:Java Byte Buddy-如何委托私有方法?,java,methods,private,delegation,byte-buddy,Java,Methods,Private,Delegation,Byte Buddy,我有以下单元测试: @Test public void TestPrivateMethodDelegation() throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException { Foo foo = new ByteBuddy()
@Test
public 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());
}
以下是它使用的类:
@NoArgsConstructor
public class Foo
{
@SuppressWarnings("unused")
private String getHello()
{
return "Hello Byte Buddy!";
}
}
@NoArgsConstructor
public class Bar
{
public String getHello()
{
return "Hello Hacked Byte Buddy!";
}
}
当我在Foo类中公开getHello()方法时,此测试通过。当我将其保留为私有时,测试失败,因为我只能假设私有方法没有正确地委托
甚至可以将私有方法委托给另一个类吗
谢谢 不,不是。Byte Buddy会像javac一样生成字节码,并且该字节码必须有效才能正常工作。您不能从另一个类调用私有方法,因此,Byte Buddy正在引发异常。不,不是。Byte Buddy会像javac一样生成字节码,并且该字节码必须有效才能正常工作。您无法从另一个类调用私有方法,因此,Byte Buddy正在引发异常。谢谢Rafael。我必须说,你做了一个伟大的产品,你明确地支持它,因为我几乎在我看到的每一篇ByteBuddy帖子上都看到了你的名字。来自加拿大的干杯!谢谢,很高兴你喜欢图书馆!谢谢你,拉斐尔。我必须说,你做了一个伟大的产品,你明确地支持它,因为我几乎在我看到的每一篇ByteBuddy帖子上都看到了你的名字。来自加拿大的干杯!谢谢,很高兴你喜欢图书馆!