Javassist编译报错:Type long_2nd (current frame, stack[2]) is not assignable to 'java/lang/Long'


 

Caused by: compile error: invalid types for >
    at javassist.compiler.CodeGen.badTypes(CodeGen.java:1365)
    at javassist.compiler.CodeGen.convertOprandTypes(CodeGen.java:1426)
    at javassist.compiler.CodeGen.compareExpr(CodeGen.java:1316)
    at javassist.compiler.CodeGen.booleanExpr(CodeGen.java:1209)
    at javassist.compiler.CodeGen.compileBooleanExpr(CodeGen.java:261)
    at javassist.compiler.CodeGen.atIfStmnt(CodeGen.java:414)
    at javassist.compiler.CodeGen.atStmnt(CodeGen.java:385)
    at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53)
    at javassist.compiler.CodeGen.atStmnt(CodeGen.java:381)
    at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53)
    at javassist.compiler.CodeGen.atWhileStmnt(CodeGen.java:467)
    at javassist.compiler.CodeGen.atStmnt(CodeGen.java:387)
    at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53)
    at javassist.compiler.CodeGen.atStmnt(CodeGen.java:381)
    at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53)
    at javassist.compiler.CodeGen.atMethodBody(CodeGen.java:321)
    at javassist.compiler.CodeGen.atMethodDecl(CodeGen.java:303)
    at javassist.compiler.ast.MethodDecl.accept(MethodDecl.java:47)
    at javassist.compiler.Javac.compileMethod(Javac.java:175)
    at javassist.compiler.Javac.compile(Javac.java:102)
    at javassist.CtNewMethod.make(CtNewMethod.java:79)
    ... 4 more
Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    demo/service/DemoService$Proxy.<init>()V @8: putfield
  Reason:
    Type long_2nd (current frame, stack[2]) is not assignable to 'java/lang/Long'
  Current Frame:
    bci: @8
    flags: { }
    locals: { 'demo/service/DemoService$Proxy' }
    stack: { 'demo/service/DemoService$Proxy', long, long_2nd }
  Bytecode:
    0x0000000: 2ab7 00a4 2a14 00a5 b500 47b1   

原因,我一段代码如下:

long start = System.currentTimeMillis();
Long timeout = 3000L;
if (System.currentTimeMillis() - start > timeout){
    // TODO
}

 

long是基本类型,Long是long的包装类型,是个对象。基本类型和对象是不能直接比较的,问题就出在这里。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM