为什么我的例外不起作用

时间:2015-09-22 09:39:42

标签: java exception

如果输入的客户名称为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);
    }
}

3 个答案:

答案 0 :(得分:8)

如果name为null或为空(在该方法中没有try / catch),

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.");
}