このエラーが発生しました:
java.lang.VerifyError: Bad <init> method call in method FooBar.<init>(I)V at offset 2
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2404)
at java.lang.Class.getConstructor0(Class.java:2714)
at java.lang.Class.getDeclaredConstructor(Class.java:2002)
ASM 4.0で変更したクラスのコンストラクターにアクセスしようとしたとき(jdk7を使用)。
クラスの初期化メソッドのバイトコードを確認しましたが、次のとおりです。
aload_0
iload_1
invokespecial com/foo/F/<init>(I)V
return
バイトコードを逆コンパイルすると、次のようになります。
import com.foo.Foo;
public class FooBar extends Foo
{
public FooBar(int i)
{
super(i);
}
}
なぜこのエラーが発生するのか、私は完全に困惑しています。十分な情報を提供したかどうかはわかりません。さらに情報を追加できるかどうか教えてください。
編集:コンストラクターにアクセスしているコードは次のとおりです。
Class fooBarClass = /* define class from class file bytes */;
Constructor fooBarConstructor = fooBarClass.getDeclaredConstructor(int.class);
EDIT2:クラスFooのコードは次のとおりです。
public class Foo extends F {
public Foo(int i) {
super(i);
}
}