我尝试将"assert“语句添加到方法中。
但是我得到了一个例外:
原因:编译错误:在javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:716) at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:681) at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:156) at javassist.compiler.ast.CallExpr.accept(CallExpr.java:45) at javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:241) at javassist.compiler.CodeGen.atStmnt(CodeGen.java:329)的mypackage.MyClassThatIsInstrumented中找不到assert(boolean)在javassist.compiler.ast.Stmnt.accept(Stmnt.java:49) at javassist.compiler.CodeGen.atStmnt(CodeGen.java:350) at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49) at javassist.compiler.CodeGen.atMethodBody(CodeGen.java:291) at javassist.compiler.Javac.compileBody(Javac.java:222) at javassist.CtBehavior.setBody(CtBehavior.java:360) ... 30多
有什么办法解决这个问题吗?
发布于 2012-10-20 20:34:20
一种解决方法是将断言实现为条件:
if(Foo.class.desiredAssertionStatus() && expr) {
throw new AssertionError();
}这基本上等同于
assert expr;现在的问题是你想如何注入它。如果需要对方法参数进行断言,可以使用method.insertBefore();如果要对结果进行断言,可以使用method.insertAfter()。
如果需要将语句插入到方法的主体中,位于语句之间的某个位置,则可以使用ExprEditor来匹配要注入新语句的所需语句
https://stackoverflow.com/questions/12116638
复制相似问题