问题描述
尝试从eclipse 2020-06(使用jdk-14.0.1)运行以下代码段(成功编译之后):
import java.util.*;
public class VerifyErrorTesting {
public static void main(String[] args) {
new ArrayList<Double>().add(
switch("t") {
case "t" -> Double.valueOf(0);
default -> 1d;
}
);
}
}
我得到以下VerifyError
:
Error: Unable to initialize main class othergoofs.VerifyErrorTesting in module goofer
Caused by: java.lang.VerifyError: Instruction type does not match stack map
Exception Details:
Location:
othergoofs/VerifyErrorTesting.main([Ljava/lang/String;)V @58: invokevirtual
Reason:
Current frame's stack size doesn't match stackmap.
Current Frame:
bci: @58
flags: { }
locals: { '[Ljava/lang/String;','java/lang/String' }
stack: { 'java/util/ArrayList','java/lang/Double' }
Stackmap Frame:
bci: @58
flags: { }
locals: { '[Ljava/lang/String;' }
stack: { 'java/util/ArrayList',double,double_2nd }
Bytecode:
0000000: bb00 1059 b700 1212 1359 4cb6 0015 ab00
0000010: 0000 0028 0000 0001 0000 0074 0000 0012
0000020: 2b12 13b6 001b 9a00 06a7 000d 0eb8 001f
0000030: b600 25a7 0007 0fb8 001f b600 2957 b1
Stackmap Table:
full_frame(@32,{Object[#47],Object[#22]},{Object[#16]})
same_locals_1_stack_item_frame(@44,Object[#16])
same_locals_1_stack_item_frame(@54,Object[#16])
full_frame(@58,{Object[#47]},{Object[#16],Double})
我尝试用javac编译相同的代码,并且运行没有问题;仅当从Eclipse运行时才会发生该错误。当我稍微更改代码时,错误就消失了。例如,将Double.valueOf(0)
更改为0d
即可正常运行。将1d
更改为Double.valueOf(1)
也可以正常运行。用new ArrayList<Double>().add
或Double d=
替换double d=
也很好。
我的问题是:是什么导致VerifyError
?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)