1
为什么构造函数中的assert语句在下面的代码中不起作用? (我想用它代替if语句,这点我注释掉)为什么“assert”不按我想要的方式工作?
import java.util.HashMap;
import java.util.Map;
enum Suite{
HEARTS, DIAMONDS, SPADES,CLUBS;
}
public class Card {
private Suite suite;
private int number;
private String name;
public Card(int number, Suite suite) {
// if(number < 0 || number > 13)
// throw new IllegalArgumentException();
assert(!(number < 0 || number >13));
this.number=number;
this.suite=suite;
initialize();
}
private void initialize(){
switch(number){
case 1: name="Ace"; break;
case 2: name="Two"; break;
case 3: name="Three"; break;
case 4: name="Four"; break;
case 5: name="Five"; break;
case 6: name="Six"; break;
case 7: name ="Seven"; break;
case 8: name ="Eight"; break;
case 9: name="Nine"; break;
case 10: name="Ten"; break;
case 11: name="Jack"; break;
case 12: name="Queen"; break;
case 13: name="King"; break;
default: break;
}
}
public int getNumber() {
return number;
}
public int getBJNumber(){
if(number == 11 || number == 12 || number == 13)
return 10;
else
return number;
}
public Suite getSuite() {
return suite;
}
public String toString(){
return name + " of " + suite.toString();
}
public static void main(String[] args) {
Card testCard = new Card(1, Suite.CLUBS);
System.out.println(testCard);
Card testCard2 = new Card(5, Suite.CLUBS);
System.out.println(testCard2);
Card testCard3 = new Card(1, Suite.CLUBS);
System.out.println(testCard3);
Card testCard4 = new Card(15, Suite.CLUBS);
System.out.println(testCard4);
}
}
输出:
Ace of CLUBS
Five of CLUBS
Ace of CLUBS
null of CLUBS <---this should have not been shown.
也许我断言的理解是不正确的?
我会有点担心使用'assert'这样的,如果你特别希望谨防在任意环境中虚假构造函数调用。也就是说,我赞成在标准卡组中添加一张“空卡”。 –
在这种情况下,这不是你的实际问题,所以张贴评论而不是答案,但是 - 你的断言是错误的。它将允许'number'为'0',但'number'的最小有效值为'1'。 – ruakh