2

内部インターフェイスで構成される Java クラスがあり、実行時に asm バイトコード インジェクションを使用して実装クラスを実装する予定です。

package my.example;
public class X{
    public static interface XInt{
        public void getX();
    }
    //the following class that implement the interface will be defined during runtime.
    //I put it here just to show how the implementation will look like
    public static XImpl extend Y implements XInt{
        public void getX(){//implementation code}
    }
}

私の asm コードは正しいと確信していますが、クラスを定義して Class.forName("my.example.X$XImpl") を呼び出した後、次のエラーが発生します。

> Bad <init> method call
Exception Details:
  Location:
    my/example/X$XImpl.<init>()V: invokespecial
  Reason:
    Type 'my/other/package/Y' is not assignable to 'my/example/X$XImpl'

私の推測では、クラス Y は実行時にまだ利用できないのでしょうか? 私にはわかりません..どんな助けもいただければ幸いです!

EDIT:XImplをロードする方法は非常に簡単です:

defineClass("my.example.X$XImpl", getXImplByte());
Class.forName("my.example.X$XImpl"); //fails here

私のバイトコードとクラスローディングメソッドが正しいと確信している理由は、他のクラスを拡張せずに実装クラスを定義するとうまくいくからです

4

1 に答える 1