gpt4 book ai didi

java - 异常原因 java.lang.VerifyError : Bad type on operand stack

转载 作者:太空狗 更新时间:2023-10-29 22:39:01 25 4
gpt4 key购买 nike

下面简单的java代码发送java.lang.VerifyError: Bad type on operand stack 异常

public class TestJavaCodes {

int parentData = 0;

public void init() {
A ob = new B();
}

public static void main(String[] args) {

TestJavaCodes testJavaCodes = new TestJavaCodes();
testJavaCodes.init();
}

public static class A {
public A(MyLambdaFunc lambdaFunc) {
}
}

public class B extends A {

public B() {
super((data1, type) -> {
parentData = 1;
});
}
}

@FunctionalInterface
public static interface MyLambdaFunc {
public void onData(String data, int type);
}
}

如果我删除代码

parentData = 1

B的构造函数中,不会出现异常。

谁能说说这是什么原因?

最佳答案

似乎这样的代码根本不应该编译。我最小化了你的代码:

public class CompilerBug {
int var = 0;

public static void main(String[] args) {
new CompilerBug().new Inner();
}

public class Inner {
public Inner(Runnable r) {}

public Inner() {
this(() -> {
var = 1;
});
}
}
}

它被 javac 1.8.0.25、1.8.0.40 和 1.9b57 编译没有问题。每个编译版本在启动时都会产生相同的输出:

Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
CompilerBug$Inner.<init>(LCompilerBug;)V @3: invokedynamic
Reason:
Type uninitializedThis (current frame, stack[2]) is not assignable to 'CompilerBug$Inner'
Current Frame:
bci: @3
flags: { flagThisUninit }
locals: { uninitializedThis, 'CompilerBug' }
stack: { uninitializedThis, 'CompilerBug', uninitializedThis }
Bytecode:
0000000: 2a2b 2aba 0003 0000 b700 04b1

at CompilerBug.main(CompilerBug.java:5)

此代码不是由 ECJ 编译器编译的。它报告编译错误:

----------
1. ERROR in C:\projects\Test\src\CompilerBug.java (at line 12)
this(() -> {
^^^^^
Cannot refer to 'this' nor 'super' while explicitly invoking a constructor
----------
1 problem (1 error)

所以它看起来像是 javac 编译器中的错误:它应该返回编译错误(如 ECJ)。

我没有在 OpenJDK bug tracker 中发现类似的 bug,所以通过 webform 提交了一个新的 bug 报告。如果 Java 人员正在阅读本文,则分配的内部审核 ID 是 JI-9021379。

更新:错误报告被接受(JDK-8129740)

关于java - 异常原因 java.lang.VerifyError : Bad type on operand stack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30365106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com