java - 方法中的 <init> 方法调用错误?

标签 java bytecode

我收到此错误:

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);
    }
}

最佳答案

尝试反编译 Foo 类并观察正确的构造函数。我打赌构造函数 Foo(int) 不存在。

关于java - 方法中的 <init> 方法调用错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11615060/

相关文章:

java - 在对象上调用 setter 后安全发布 Java 对象

java - 如何解决各种 log4j 的包冲突?

java - JPA/Hibernate - 父类(super class)查询时如何确定子类类型?

apache-flex - Flash 应用依赖于 Flex。是否有任何 SWF 字节码大小优化器?

java - 如何使用 Java 检测用新类替换类?

java - 修改包含元数据的 Excel 工作表 - 如何避免不必要的警告?

java - 如何在一个类图中显示所有类

java - 使用 ASM 字节码进行测试

java - 如何将 JVM 汇编代码编译成字节码?

java - 如何使用 Scala (50.0/51.0) 发出更新的类文件版本?