Java方法重载时参数类型有重合,它会选择执行哪一个?
2012-06-13 16:53
417 查看
本文出处:http://blog.csdn.net/chaijunkun/article/details/7660178,转载请注明。由于本人不定期会整理相关博文,会对相应内容作出完善。因此强烈建议在原始出处查看此文。
今天写了一个对象组件,用来判断是否为空。但是我要求的“空”的定义并不相同。如果是普通对象,只要指向为null就可以认定其为空,如果是容器对象,不仅要检查其指向,还要检查容器中是否存有内容,如果没有内容,照样认定其为空。这个其实有点像jsp中JSTL的EL表达式,test="${empty object}" 的实现。下面是我写的代码:
这些判断方法都是重载的。但是写完之后发现一个问题,Set、Map、List这些容器最终都是Object。那么我如果放入的是一个Set对象,那会不会变成执行isEmpty(Object obj)方法了呢?为此我做了一个实验:
今天写了一个对象组件,用来判断是否为空。但是我要求的“空”的定义并不相同。如果是普通对象,只要指向为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会按照就近原则,重载方法调用时会使用最符合参数类型的方法。
相关文章推荐
- Java编译时类型与运行时类型以及重载和覆盖方法选择
- Java中的方法重载的参数是以静态类型为依据
- Java 小细节——方法基本类型参数的重载
- java方法重载--参数类型转换
- Java 定义一个参数类型一样,但个数不固定的方法
- C#方法参数个数和类型相同,名称不同,可以实现重载吗
- java :引用类型的转换  方法重载和重写  构造函数 修饰符
- 怎么在byte、short、char、int类型参数方法中重载
- java中,方法参数是基本类型和引用类型的区别
- Java方法的可变参数类型
- Java方法的可变参数类型
- Java可变参数方法的重载实例
- Java String类型在方法之中的参数传递
- Java中方法名的重载,形参个数不同,形参类型不同,类型顺序不同
- [改善Java代码]避免带有变长参数的方法重载
- Java方法的可变参数类型
- java通过反射+javassist获得方法所有信息(返回值、方法名、参数类型列表、参数列表)
- Java重载时,存在多个匹配的方法该如何选择?
- C#学习笔记。。创建重载方法,求两个数的乘积,参数类型分别为int,float,double
- 利用Javassist获取Java类中的方法参数名、参数类型、方法访问类型