VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • 记录一次空对象调用isEmpty()的经历

  在做项目的的时候,调用了一个前同事的接口,发现在他的实现类里出现了一个问题:他使用了集合对象调用isEmpty()方法用来判断集合是否为空。这种做法初看一直看不出什么问题,后来经过了小测试终于发现了问题。

  先贴上代码:

/**
* @author 拾万个为什么

* @date 2021/3/30
* @since JDK1.8
*/
public class IsEmptyDemo {

public static void main(String[] args) {

Set s = new HashSet();
System.out.println(s.isEmpty());
}

}

  以上代码输出"true",再看下面的代码,猜一猜输出什么:

/**
* @author 拾万个为什么

* @date 2021/3/30
* @since JDK1.8
*/
public class IsEmptyDemo {

public static void main(String[] args) {

Set s = null;
System.out.println(s.isEmpty());
}

}

  没错,这是控制台打印的:

Exception in thread "main" java.lang.NullPointerException
at IsEmptyDemo.main(IsEmptyDemo.java:14)

  同样,下面的代码打印的是结果是一样的:

/**
* @author 拾万个为什么

* @date 2021/3/30
* @since JDK1.8
*/
public class IsEmptyDemo {

public static void main(String[] args) {

String s = null;
System.out.println(s.length());
}
}

  那么,如何判断空对象呢?可以这样:

/**
* @author 拾万个为什么

* @date 2021/3/30
* @since JDK1.8
*/
public class IsEmptyDemo {

public static void main(String[] args) {

Set s = null;

if(s != null && s.size() != 0){
System.out.println(s.size());
}else{
System.out.println("s is null");
}
}
}

  或者,使用hutool这个工具类的isEmpty方法


public class ObjectUtil {
/**
* 判断指定对象是否为空,支持:
*
* <pre>
* 1. CharSequence
* 2. Map
* 3. Iterable
* 4. Iterator
* 5. Array
* </pre>
*
* @param obj 被判断的对象
* @return 是否为空,如果类型不支持,返回false
* @since 4.5.7
*/
@SuppressWarnings("rawtypes")
public static boolean isEmpty(Object obj) {
//obj为null直接返回true
if (null == obj) {
return true;
}
//假如obj属于字符串,则调用字符串工具类进行判断,以下几个类似
if (obj instanceof CharSequence) {
return StrUtil.isEmpty((CharSequence) obj);
} else if (obj instanceof Map) {
return MapUtil.isEmpty((Map) obj);
} else if (obj instanceof Iterable) {
return IterUtil.isEmpty((Iterable) obj);
} else if (obj instanceof Iterator) {
return IterUtil.isEmpty((Iterator) obj);
} else if (ArrayUtil.isArray(obj)) {
return ArrayUtil.isEmpty(obj);
}
return false;
}

}
 
出  处:https://www.cnblogs.com/fengrongriup/p/14595951.html
 


相关教程