如果输入的客户名称为null,则应该抛出异常,但我的代码不起作用。
public class CustomerAccount {
private String name;
public CustomerAccount(String name) throws IllegalArgumentException {
this.setName(name);
}
public String getName() {
return name;
}
public void setName(String name) throws IllegalArgumentException {
try {
this.name = name;
}
catch (IllegalArgumentException illegal) {
if (name == "" || name == null) {
System.err.println("please do not enter the empty string" + illegal);
}
}
}
public String toString() {
return "Name: " + this.getName();
}
public static void main(String[] args) {
CustomerAccount c1 = new CustomerAccount("random name");
c1.setName(null);
System.out.println(c1);
}
}
答案 0 :(得分:8)
setName应该只抛出IllegalArgumentException。
public void setName(String name) throws IllegalArgumentException {
if ("".equals(name) || name == null) {
throw new IllegalArgumentException("Name should not be null or empty");
}
this.name=name;
}
答案 1 :(得分:0)
使用name.equals("")
最好使用equals()
进行字符串比较。
答案 2 :(得分:0)
仅仅指定空值不会触发异常!
更重要的是,本着 fail-fast 的精神,方法参数验证通常首先在方法实现中完成。此外,name == ""
不太可能起作用,因为name
可能在运行时设置,因此分配了不同的内存地址""
。最后但并非最不重要的是,约定规定使用NullpointerException
而不是IllegalArgumentException
(参见Effective Java Item 60)。
添加所有这些,你可以实现这样的方法:
public void setName(@Nonnull final String name) {
if (name == null || name.length() == 0) {
throw new NullPointerException("[name] must not be null or empty.");
}
this.name = name;
}
由于这种检查是您在代码中可能会做很多次的事情,我建议使用库函数进行检查:
使用番石榴:
Preconditions.checkArgument(name != null && name.length() > 0, "[name] must not be null or empty.");
使用Apache Commons:
if (StringUtils.isEmpty(name)) {
throw new NullPointerException("[name] must not be null or empty.");
}