1. ホーム
  2. java

[解決済み】例外の理由 java.lang.VerifyError: オペランド・スタックに不正な型があります。

2022-02-05 13:52:51

質問

以下の簡単なJavaコードで java.lang.VerifyError: オペランドスタックに不正な型があります 例外

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のコンストラクタで、例外が来ないようにします。

どなたか、この理由を教えてください。

解決方法は?

この問題は、ラムダ式が以下のものを参照していないために発生します。 this のメンバーか this

this

B

public class B extends A { int innerData; public B() { super((data1, type) -> innerData = 1); } }

innerData

this

public class B extends A { public B() { this(TestJavaCodes.this); } private B(TestJavaCodes outer) { super((data1, type) -> outer.parentData = 1); } }