要するに: 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 動的プロキシを使用する場合は、何らかのインターフェイス (メンバーなど) を使用する必要があります。ただし、主な欠点が 2 つあります。まず、次のような方法
public Class<?>[] getParameterTypes();
など
public Class<?> getReturnType();
それらは広く使用されていますが、どのインターフェースの一部でもありません。
2 番目の欠点は、ドロップイン交換を提供できないことです。つまり、java.lang.reflect.Method を期待するコードに動的プロキシを渡すことができません。
もう 1 つの方法は、CGLIB または Javaassist を使用することです。AFAIK、CGLIBは最終クラスをプロキシできませんよね?Javaassistは最終クラスをプロキシできますか? クラスから最終識別子を「削除」するにはどうすればよいですか? AFAIL、Javavassistは何とかそれを行うことができます...