本文出处: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会按照就近原则,重载方法调用时会使用最符合参数类型的方法。

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

  1. Java方法中的参数太多,第4部分:重载

    期望将过多的参数传递给Java方法的问题之一是,该方法的客户端很难确定它们是否以适当的顺序传递了适当的值. 在以前的文章中,我描述了如何使用自定义类型 , 参数对象和构建器来解决此问题. 解决此问题的 ...

  2. java 方法重载调用_Java方法的定义以及调用、方法重载、可变参数以及递归

    何谓方法 Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 System.out.println();/ ...

  3. Java方法中的参数太多,第1部分:自定义类型

    我认为构造函数和方法中冗长的参数列表是Java开发中的另一个" 危险信号 ",就逻辑和功能而言,它们不一定是"错误的",但通常暗示当前或将来出现错误的可能性很高 ...

  4. Java如何调用方法的重载_java方法重载时的调用选择

    重载:方法名相同,参数列表不同:参数列表包括参数的个数,类型,不包括参数的返回值,抛出的异常等. 对于方法重载时具体调用的选择,往往不是很清晰,看代码: public class TestOverlo ...

  5. Java 方法重载 方法重写

    方法重载规则 参数个数不同 参数个数相同,但参数列表中对应的某个参数的类型不一样 方法的返回类型和参数名称不参与重载 "编译期绑定",,因为未产生对象,只看参数.引用类型绑定方法 ...

  6. java方法重载和重载方法_Java 8的方法参考进一步限制了重载

    java方法重载和重载方法 方法重载一直是一个充满喜忧参半的话题. 我们已经在博客上介绍了它,并介绍了几次警告: 您会后悔对Lambdas应用重载! 保持干燥:方法重载 为什么每个人都讨厌操作员超载 ...

  7. Java方法中的参数太多,第5部分:方法命名

    在上一篇文章 (有关处理Java方法中过多参数的系列文章的 第4部分 )中,我将方法重载视为一种向客户提供需要较少参数的方法版本或构造函数的方法. 我描述了该方法的一些缺点,并建议从方法重载中摆脱出来 ...

  8. Java方法中的参数太多,第6部分:方法返回

    在当前的系列文章中,我正在致力于减少调用Java方法和构造函数所需的参数数量,到目前为止,我一直专注于直接影响参数本身的方法( 自定义类型 , 参数对象 , 构建器模式 , 方法重载和方法命名 ). ...

  9. java方法重载和重载方法_Java中的重载与重载

    java方法重载和重载方法 Overriding Vs Overloading In Java 在Java中覆盖vs重载 Overriding and Overloading are the core ...

最新文章

  1. PHPExcel使用-使用PHPExcel导出文件-导出MySQL数据
  2. ASP.NET在IIS上部署使用Oracle数据库无法连接数据库解决方法
  3. java html 生成 pdf_Java实现HTML代码生成PDF文档
  4. HDU 6030 Happy Necklace
  5. JavaScript URL参数读取
  6. a5d2 mac 驱动分析
  7. 【转】AfxMessageBox、MessageBox、::MessageBox的区别
  8. Nginx用为缓存服务器
  9. 何凯明 Single Image Haze Removal Using Dark Channel Prior
  10. 怎么用计算机excel计算矩阵,怎样用EXCEL进行矩阵计算?
  11. Spring Boot中级篇-集成Swagger2分组文档
  12. 特种期货开户交易权限开通认定标准
  13. 佳信客服接口文档 REST API
  14. 读书笔记:聪明人用方格纸
  15. 如何使用谷歌colab
  16. 如何使用Sketch绘制半个圆角矩形
  17. 解决openwrt opkg内核版本不匹配问题
  18. Cron表达式范例:每隔5秒执行一次:*/5 * * * * ?
  19. Vector的自动排序Sort
  20. mysql的联合索引_mysql联合索引详解

热门文章

  1. oracle还原数据库及遇到的问题
  2. VMware Linux VDI 安装步骤
  3. 【熟能生巧】系列第2期 - 倒计时脚本
  4. 区块链技术应用——站在风口上猪都会飞
  5. 物联网:发动一场生态系革命
  6. Troubleshooting OpenStack 瘫痪 - 每天5分钟玩转 OpenStack(160)
  7. DVB开发之OTA升级
  8. Struts2 Problem Report: No result defined for action ... and result exception
  9. Windows下配置Nginx使之支持PHP(转)
  10. Maven仓库管理器