求求你,别再使用if-throw判断并抛出异常了

老铁们,我们先来对以下两段代码。

package com.qianfeng.asserts;  
  
import org.springframework.stereotype.Service;  
import org.springframework.util.Assert;  
  
@Service  
public class LoginService {
    
      
    public void login(String name, String password) {
    
      
        if (name == null || name.isEmpty()) {
    
      
            throw new RuntimeException("请输入用户名");  
        }  
        if (password == null || password.isEmpty()) {
    
      
            throw new RuntimeException("请输入密码");  
        }  
        .....  
    }  
}

在上面的代码中,我们判断了数据的合法性,如果不满足需求,通过抛出运行时异常的方式中断程序执行。如果是以代码行数作为老任的绩效考核标准,老任肯定可以把老板写破产。

image.png

其实我们完全可以把以上代码换一种写法,比如下面的这种写法:

package com.qianfeng.asserts;  
  
import org.springframework.stereotype.Service;  
import org.springframework.util.Assert;  
  
@Service  
public class LoginService {
    
      
    public void login(String name, String password) {
    
      
        Assert.notNull(name, "请输入用户名");  
        Assert.notNull(password, "请输入密码");  
        ......  
    }  
}

如果name或者password的值为null,就会抛出异常。这种代码,看着是不是清爽了很多

断言

在上述代码中,我们其实使用了Spring中的断言类。

断言(assert)其实是jdk 1.4中提供的一个关键字,使用断言,可以实现对数据的快速验证。Assert类借助了该思想,优雅地实现了数据的验证。

我们来看看Assert类中notNull()方法的源码:

image.png

现在你看到了,该方法的实现很简单,满足判断条件,就抛出IllegalArgumentException异常。Assert类中还有很多其他的方法,它们的实现思想都是一模一样的。

但是这样写,只能抛出IllegalArgumentException异常,而且不能根据特定类型的数据进行更全面的判断。如果我们想进行定制,想要抛出自定义的异常,还需要我们自己动手,丰衣足食。

自定义断言类

1.自定义异常类

通常情况下,我们都会在项目中自定义自己的异常类,用于处理各种异常信息。

package com.qianfeng.asserts;  
  
/**  
 * 自定义异常类  
 */  
public class MyException extends RuntimeException {
    
      
    /**  
     * 异常编码  
     */  
    private int code;  
    /**  
     * 异常信息  
     */  
    private String msg;  
  
    public MyException(int code, String msg) {
    
      
        this.code = code;  
        this.msg = msg;  
    }  
}

2.自定义断言类

接下来我们来自定义一个断言,如下所示:

package com.qianfeng.asserts;  
  
/**  
 * 自定义断言类  
 */  
public class MyAssert {
    
      
    /**  
     * 如果待判断的数据为null,抛出异常  
     * @param info  
     * @param message  
     */  
    public static void assertNotEmpty(String info, String message) {
    
      
        if (info == null || info.trim().isEmpty()) {
    
      
            throw new MyException(CommonConstants.ERROR, message);  
        }  
    }  
}

3.测试

现在代码写好啦,我们来测试一下吧。

package com.qianfeng.asserts;  
  
import org.springframework.stereotype.Service;  
  
@Service  
public class LoginService {
    
      
    public void login(String name, String password) {
    
      
        MyAssert.assertNotEmpty(name, "请输入用户名");  
        MyAssert.assertNotEmpty(password, "请输入密码");  
        ......  
    }  
}

image.png

老任在这里只是抛砖引玉,我们可以根据实际需求再增加其他的断言判断。

如果你还有不明白的地方,可以在评论区或私信给我~~


猜你喜欢

转载自blog.csdn.net/GUDUzhongliang/article/details/130520439