我想忽略对源类和目标对象抽象的方法的插入,但如果它是单独对源的抽象方法,那么我想对目标对象调用等效方法。目前我正在使用这个
adapter = new ByteBuddy().subclass(source.class)
.method(ElementMatchers.isAbstract())
.intercept(MethodCall.invokeSelf().on(target).withAllArguments()).make()
.load(clazz.getClassLoader(),ClassLoadingStrategy.Default.INJECTION).getLoaded().newInstance()
但是得到这些类型的异常无论是在源类中还是在目标对象中都没有实现的抽象方法都失败了,并出现以下错误。
无法调用公共抽象java.lang.Object java.sql.Wapper.unwrap(java.lang.Class(在公共静态易失性java.lang.CClass com.demo.Source$ByteBuddy$f7N2VK0l.invocationTarget$fl948k0 上抛出java.sql.SQLException
如果方法在两种情况下都是抽象的,我可以实现以下任何一种场景吗?
- 忽略在源和目标中都没有实现的抽象方法的插入
- 将不匹配的方法重定向到默认方法
如果你知道确切的目标类型,你可以在匹配器中确定吗?在这种情况下,实现您自己的匹配器。
您也可以使用MethodDelegation和Pipe注释。在这里,您可以捕获一个异常并返回一个回退。