断言不起作用
问题内容:
我正在尝试编写一个断言,以检查用户提供的大小是否为正值,如果不是,则使其为正,此语句位于类构造函数内部,该类构造函数采用大小值,然后生成array
[size]。我写了下面的代码,我认为是正确的。
public Grid(int size) {
try{
assert size > 0 ;
}
catch(AssertionError e){
size = Math.abs(size);
}
setLayout(new GridLayout(size, size));
grid = new JButton[size][size];
}
尽管我似乎从未评估过我的断言并继续执行程序,但会导致NegativeArraySize错误(我正在尝试避免)
我也尝试过
assert size>0;
并且程序无法停止为负值。
我最近在Mac上运行Java时遇到了一些问题,所以我不知道我的代码是否正确,或者它只是那些奇怪的Mac怪癖之一!并且应该只使用
size=Math.abs(size);
谢谢山姆,
问题答案:
您需要使用-ea
开关运行程序(启用断言),否则assert
JVM将完全不运行任何指令。依靠断言有些危险。我建议你做这样的事情:
public Grid(int size) {
size = Math.max(0, size)
setLayout(new GridLayout(size, size));
grid = new JButton[size][size];
}
甚至像这样:
public Grid(int size) {
if(size < 0) {
throw new IllegalArgumentException("cannot create a grid with a negative size");
}
setLayout(new GridLayout(size, size));
grid = new JButton[size][size];
}
第二个建议的好处是向您显示了代码其他部分中潜在的编程错误,而第一个建议则无提示地忽略了它们。这取决于您的用例。