我正在从ByteBuddy创建一个动态类,该类扩展了我自己的类SupportMapFragment
,该类扩展了Fragment
并在布局中使用它。我想将对该类的所有方法调用重定向到Google SupportMapFragment
的另一个片段实例。
这是我的代码:
ByteBuddy() .subclass(SupportMapFragment::class.java) .method(ElementMatchers.any()) .intercept(MethodDelegation.to(com.google.android.gms.maps.SupportMapFragment.newInstance())) .make() .load(MainActivity::class.java.classLoader, AndroidClassLoadingStrategy.Injecting(file)) .loaded
但是方法解析不能按我的要求进行。首先是
clone()
方法具有不明确的委托。我可以(以某种方式)通过使用ElementMathers
在方法构建器调用中过滤方法来解决此问题。但是片段方法也无法解决]
Caused by: java.lang.IllegalArgumentException: Cannot resolve ambiguous delegation of public void androidx.fragment.app.Fragment.onPrimaryNavigationFragmentChanged(boolean) to net.bytebuddy.implementation.bind.MethodDelegationBinder$MethodBinding$Builder$Build@83edf592 or net.bytebuddy.implementation.bind.MethodDelegationBinder$MethodBinding$Builder$Build@4349b5d2
我不知道为什么会有歧义,如何解决这个问题。
我正在从ByteBuddy创建一个动态类,该类扩展了我自己的类SupportMapFragment,该类扩展了Fragment并在布局中使用它。我想将对该类的所有方法调用重定向到另一个...
对于重定向,您不应使用MethodDelegation
,而应使用MethodCall
。方法调用允许您在另一个实例或字段上调用检测的方法。这样,Byte Buddy甚至不花时间试图找出最佳的拦截器(一个相当昂贵的过程),而是直接调用当前已检测到的方法。