本文出处:http://blog.csdn.net/chaijunkun/article/details/7660178,转载请注明。由于本人不定期会整理相关博文,会对相应内容作出完善。因此强烈建议在原始出处查看此文。
今天写了一个对象组件,用来判断是否为空。但是我要求的“空”的定义并不相同。如果是普通对象,只要指向为null就可以认定其为空,如果是容器对象,不仅要检查其指向,还要检查容器中是否存有内容,如果没有内容,照样认定其为空。这个其实有点像jsp中JSTL的EL表达式,test="${empty object}" 的实现。下面是我写的代码:
import java.util.List;
import java.util.Map;
import java.util.Set;
public class ObjectUtil {
public static boolean isEmpty(Object obj){
return (obj==null);
}
public static boolean isNotEmpty(Object obj){
return !isEmpty(obj);
}
@SuppressWarnings("rawtypes")
public static boolean isEmpty(Set set){
if ((set== null) || (set.isEmpty())){
return true;
}else{
return false;
}
}
@SuppressWarnings("rawtypes")
public static boolean isNotEmpty(Set set){
return !isEmpty(set);
}
@SuppressWarnings("rawtypes")
public static boolean isEmpty(Map map){
if ((map== null) || (map.isEmpty())){
return true;
}else{
return false;
}
}
@SuppressWarnings("rawtypes")
public static boolean isNotEmpty(Map map){
return !isEmpty(map);
}
@SuppressWarnings("rawtypes")
public static boolean isEmpty(List list){
if ((list== null) || (list.isEmpty())){
return true;
}else{
return false;
}
}
@SuppressWarnings("rawtypes")
public static boolean isNotEmpty(List list){
return !isEmpty(list);
}
}
这些判断方法都是重载的。但是写完之后发现一个问题,Set、Map、List这些容器最终都是Object。那么我如果放入的是一个Set对象,那会不会变成执行isEmpty(Object obj)方法了呢?为此我做了一个实验:
public class TestClass {
public static void main(String[] args) {
Set<String> test= new HashSet<String>();
if (ObjectUtil.isEmpty(test)){
System.out.println("为空");
}else{
System.out.println("不为空");
}
}
}
执行后发现返回的内容为:“为空”,因此说明代码中判断了test容器是否存储了内容。这同时也说明,Java会按照就近原则,重载方法调用时会使用最符合参数类型的方法。