Java中实现判断空字符的方法有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
前言
对于Java程序员来说,零是令人头痛的东西。时常会受到空指针异常(肺水肿)的骚扰。连Java的发明者都承认这是他的一项巨大失误。
那么,有什么办法可以避免在代码中写大量的判空语句呢?
有人说可以使用JDK8提供的可选来避免判空,但是用起来还是有些麻烦。
作者在日常工作中,封装了一个工具,可以可以链式调用对象成员而无需判空,相比原有的如果零逻辑和JDK8提供的可选更加优雅易用,在工程实践中大大提高了编码效率,也让代码更加的精准和优雅。
不优雅的判空调用
我想从事Java开发的小伙伴肯定有遇到过下面这种让人难受的判空逻辑:现在有一个用户类,学校是它的成员变量
/* * * @author轴蛋白 * @since 2020-09-20 * @summary一个用户类定义 * (Ps:数据是lombok组件提供的注解,简化了预备等等的约定代码) */@ data 公开课用户{ 私人字符串名称; 私人字符串性别; 私立学校的学校; @ data 公共静态类学校{ 私人字符串scName; 私人地址的字符串; } }
现在想要获得学校的成员变量地址,一般的处理方式:
公共静态void main (String [] args) { 用户轴蛋白=新用户(); 用户。学校学校=new User.School (); axin.setName (“hello"); 如果(Objects.nonNull(轴蛋白),,Objects.nonNull (axin.getSchool ())) { 用户。学校userSc=axin.getSchool (); System.out.println (userSc.getAdress ()); } }
获取地址时要对学校进行判空,虽然有些麻烦,到也能用,通过JDK8提供的可选的工具也是可以,但还是有些麻烦。
而下文的OptionalBean提供一种可以链式不断地调用成员变量而无需判空的方法,直接链式调用到你想要获取的目标变量,而无需担心空指针的问题。
链式调用成员变量
如果用了本文设计的工具OptionalBean,那么上述的调用可以简化成这样:
公共静态void main (String [] args) { 用户轴蛋白=新用户(); 用户。学校学校=new User.School (); axin.setName (“hello");//1。基本调用 字符串value1=OptionalBean.ofNullable(轴蛋白) .getBean(用户::getSchool) .getBean (User.School:: getAdress) . get (); System.out.println (value1); }
执行结果:
其中用户的学校变量为空,可以看到代码并没有空指针,而是返回了空。这个工具怎么实现的呢?
OptionalBean工具
/* * * @author轴蛋白 * @since 2020-09-10 * @summary链式调用bean中价值的方法 */公众最终类OptionalBean&肝移植;T& gt;{ 私有静态最终OptionalBean&肝移植;及# 63;和gt;空=new OptionalBean&肝移植;和gt; (); 私人最后T值; 私人OptionalBean () { 这一点。值=https://www.yisu.com/zixun/null; }/* * *空值会抛出空指针 * @param价值 */私人OptionalBean (T值){ 这一点。值=Objects.requireNonNull(价值); }/* * *包装一个不能为空的bean * @param价值 * @param* @return */公共静态 OptionalBean (T值){ 返回新OptionalBean <>(价值); }/* * *包装一个可能为空的bean * @param价值 * @param * @return */公共静态 OptionalBean ofNullable (T值){ 返回值==null & # 63;空():(价值); }/* * *取出具体的值 * @param fn * @param * @return */公共T get () { 返回Objects.isNull(价值)& # 63;空:价值; }/* * *取出一个可能为空的对象 * @param fn * @param Java中实现判断空字符的方法有哪些