我在第3行遇到编译错误,java中的断言是否有特殊情况?我不确定为什么它会从methodB()中获得一些返回类型,有人可以帮助我吗?感谢
public class AssertTest {
public void methodA(int i) {
assert i >= 0 : methodB();
System.out.println(i);
}
public void methodB() {
System.out.println("The value must not be negative");
}
public static void main(String args[]) {
AssertTest test = new AssertTest();
test.methodA(-10);
}
}
答案 0 :(得分:9)
The docs很清楚:
Expression2是具有值的表达式。 (它不能是对声明为void的方法的调用。)
使用此版本的assert语句为AssertionError提供详细消息。系统将Expression2的值传递给相应的AssertionError构造函数,该构造函数使用值的字符串表示形式作为错误的详细消息。
因此,该方法的返回值用作错误消息。在您的情况下,不要打印到系统,只需返回字符串。
请注意,即使您编译此代码,也会打印-10
。默认情况下不启用断言,因此您必须enable them。
下次有疑问时,请先查阅文档。
答案 1 :(得分:4)
仅将错误消息直接放在assert
语句中更简单,更易读:
assert (i >= 0) : "AssertTest: The value must not be negative.";
当断言触发时,Java系统将显示消息。
答案 2 :(得分:2)
断言陈述的第二种形式是:
assert Expression1 : Expression2 ;
其中:
Expression1是一个布尔表达式。 Expression2是一个表达式 有价值。 (它不能是对声明的方法的调用 空隙。)
http://download.oracle.com/javase/1.4.2/docs/guide/lang/assert.html
基本上,Expression2
必须返回一个值,而不是void
。
答案 3 :(得分:0)
您的方法应该有返回类型。
http://download.oracle.com/javase/1.4.2/docs/guide/lang/assert.html
以下是该链接的相关信息:
断言陈述的第二种形式是:
assert Expression1 : Expression2 ;
其中:
* Expression1 is a boolean expression.
* Expression2 is an expression that has a value. **(It cannot be an invocation of a method that is declared void.)**