您的位置:首页 > 编程语言 > Java开发

Java方法重载时参数类型有重合,它会选择执行哪一个?

2012-06-13 16:53 417 查看
本文出处: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会按照就近原则,重载方法调用时会使用最符合参数类型的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: