Java ASM基本解释程序非法状态异常

Java ASM基本解释程序非法状态异常,java,bytecode,java-bytecode-asm,Java,Bytecode,Java Bytecode Asm,我在这里看到了这一点,所以我正在尝试根据公认的答案编译代码。 不幸的是,我一直在代码的这一部分遇到非法状态异常: BasicInterpreter basic = new BasicInterpreter() { @Override public BasicValue newValue(Type type) { return type!=null && (type.getSort()==Type.OBJECT || type.getSort

我在这里看到了这一点,所以我正在尝试根据公认的答案编译代码。 不幸的是,我一直在代码的这一部分遇到非法状态异常:

BasicInterpreter basic = new BasicInterpreter() {
        @Override public BasicValue newValue(Type type) {
            return type!=null && (type.getSort()==Type.OBJECT || type.getSort()==Type.ARRAY)?
                    new BasicValue(type): super.newValue(type);
        }
        @Override public BasicValue merge(BasicValue a, BasicValue b) {
            if(a.equals(b)) return a;
            if(a.isReference() && b.isReference())
                // this is the place to consider the actual type hierarchy if you want
                return BasicValue.REFERENCE_VALUE;
            return BasicValue.UNINITIALIZED_VALUE;
        }
    };
使用堆栈跟踪:

Exception in thread "main" java.lang.IllegalStateException
    at org.objectweb.asm.tree.analysis.BasicInterpreter.<init>(BasicInterpreter.java:66)
    at ConstantTracker$1.<init>(ConstantTracker.java:48)
    at ConstantTracker.<init>(ConstantTracker.java:48)
    at HelloWorld.analyze(HelloWorld.java:37)
    at HelloWorld.main(HelloWorld.java:28)
我试图继承BasicInterpreter,但我一直得到相同的异常

class BasicInterpreterLocal extends BasicInterpreter{} // Throws an IllegalStateException
我用ASM7.*、8.*、9.0进行了尝试,但没有任何效果

那么问题是什么?。我找不到它。

如中所述,子类应该使用接受库版本号的构造函数来确定ASM库的兼容性级别。代码最初使用的ASM库版本5似乎没有检查此要求。但您使用的是执行此规则的库的更新版本(显然是8)

将代码更改为

BasicInterpreter basic=新的BasicInterpreter(操作码.ASM5){//
class BasicInterpreterLocal extends BasicInterpreter{} // Throws an IllegalStateException