简而言之: 1. 我有一些最终类,我想为其创建动态代理。我该怎么做?2. 我可以将 MethodHandle 转换为 Method 吗?
详细信息 首先,是否存在将 MethodHandle 转换为 Method 的 API?类似于 java.lang.invoke.MethodHandles
public MethodHandle unreflect(Method m) throws IllegalAccessException;
但相反的方式呢?
假设我想创建动态 java.lang.reflect.Method。它被认为是
public final
class Method extends AccessibleObject implements GenericDeclaration,
Member ;
所以,如果我想使用 JDK 动态代理,我必须使用一些接口(例如成员)。虽然有两个主要缺点。一、方法如
public Class<?>[] getParameterTypes();
比如
public Class<?> getReturnType();
不是任何接口的一部分,但它们被广泛使用。
第二个缺点是它无法提供直接替换。也就是说,我无法将我的动态代理传递给需要 java.lang.reflect.Method 的代码。
另一种方法是使用 CGLIB 或 Javaassist。AFAIK,CGLIB 不能代理最终课程,是吗?Javaassist 可以代理最终类吗?如何从课程中“删除”最终标识符?失败,Javvassist 可以以某种方式做到这一点......