0

我尝试在方法中添加“断言”语句。

但我得到了这个例外:

引起:编译错误:在 javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:681) 在 javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:716) 的 mypackage.MyClassThatIsInstrumented 中找不到 assert(boolean) 在 javassist.compiler .JvstTypeChecker.atCallExpr(JvstTypeChecker.java:156) 在 javassist.compiler.ast.CallExpr.accept(CallExpr.java:45) 在 javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:241) 在 javassist.compiler.CodeGen。 atStmnt(CodeGen.java:329) 在 javassist.compiler.ast.Stmnt.accept(Stmnt.java:49) 在 javassist.compiler.CodeGen.atStmnt(CodeGen.java:350) 在 javassist.compiler.ast.Stmnt.accept (Stmnt.java:49) 在 javassist.compiler.CodeGen.atMethodBody(CodeGen.java:291) 在 javassist.compiler.Javac.compileBody(Javac.java:222) 在 javassist.CtBehavior.setBody(CtBehavior.java:360) ... 30 更多

任何想法如何解决这个问题?

4

1 回答 1

0

一种解决方法是将断言作为条件实现:

 if(Foo.class.desiredAssertionStatus() && expr) {
   throw new AssertionError();
 }

这基本上相当于

 assert expr;

现在是你想如何注入它的问题。如果需要对方法参数进行断言,可以使用 method.insertBefore(); 如果您要断言结果,则可以使用 method.insertAfter()。

如果需要将语句插入到方法的主体中,在语句之间的某个位置,那么您可以使用ExprEditor匹配您希望将新语句注入的所需语句

于 2012-10-20T12:34:19.633 回答