Java Bytecode Error : Expecting to find object/array on stack

Java Bytecode Error : Expecting to find object/array on stack

我正在将一种简单的语言编译成 JVM 字节码,但在 Java 对象方法调用方面遇到了一些问题。验证者给出以下错误

java.lang.VerifyError: (class: Test_1, method: main signature: ()V) Expecting to find object/array on stack

以下是 IntelliJ

从我的字节码生成的 Java 源代码
import java.util.ArrayList;

public final class Test_1 {
    public static void main() {
        ArrayList var1 = new ArrayList();
        var1.add(19);
        int var2 = (Integer)var1.get(0);
    }
}

这正是我想要做的。创建一个 ArrayList,分配一个值并从中读取。上面的代码对我来说看起来像是一个有效的 Java 代码。

下面是我的字节码

{
  public static void main();
    descriptor: ()V
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=0
  0: new           #9  // class java/util/ArrayList
  3: dup
  4: invokespecial #12  // Method java/util/ArrayList."<init>":()V
  7: astore_1
  8: aload_1
  9: bipush        19
  11: invokestatic  #16  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
  14: invokevirtual #26  // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
  17: pop
  18: aload_1
  19: astore_0
  20: aload_0
  21: iconst_0
  22: invokevirtual #34  // Method java/util/ArrayList.get:(I)Z
  25: checkcast     #2   // class java/lang/Integer
  28: invokevirtual #11  // Method java/lang/Integer.intValue:()I
  31: istore_1
  32: return
}

我怀疑第 18-20 行发生了一些有趣的事情,但我不确定。其余的字节码指令对我来说似乎没问题。

为什么验证者抱怨在堆栈上找不到对象?

22处的ArrayList.get方法的签名是错误的。
正确的是(I)Ljava/lang/Object;