Java 用重载的一些建议
来源:互联网 发布:17年机械行业数据 编辑:程序博客网 时间:2024/06/01 09:54
Java 面向对象的语言,相信很多人都知道Java 的三大面向对象特征 封装 , 继承 , 多态 ,其中多态的特点就是 覆盖 和 重载,但是覆盖是有机制规范的,重载机制是例外的,如果给定的API 普通用户根本不知道会具体调用哪个重载的方法,所以会导致参数的错误,一般大家都重写过 判断对象是否为空的这个方法 下面写出示例:
public static boolean notNull(Collection<?> c){
return c == null ? false : c.size() == 0 ? false : true;
}
public static boolean notNull(String str){
return "".equals(str) ? false : null == str ? false : true;
}
public static boolean notNull(Object obj){
return "" == obj ? false : null == obj ? false : true;
}
public static void main(String[] args) {
// col 是运行了 集合的重载方法 obj 运行 object 重载方法 str是运行 String 重载方法
List list = null;// col
Set set = null;// col
Map map = null ;// obj
int i = 0; // obj
String str = null;// str
long l = 0l;// obj
System.out.println(notNull(list));
System.out.println(notNull(set));
System.out.println(notNull(map));
System.out.println(notNull(i));
System.out.println(notNull(str));
System.out.println(notNull(l));
}
可能大家已经看出来了 因为 List 和 Set 继承 Collection 集合 Map 没有继承Collection 集合 所以Map 运行 Object 的重载方法,在实际项目中可能会出现问题
这个可能不会有很大影响 但是 JDK 1.5 发布之后 自动装箱出现 才出现更大的问题
下面请看示例
Set<Integer> set = new TreeSet<Integer>();
List<Integer> list = new ArrayList<Integer>();
for(int i = -3, x = 3; i < x; i++){
set.add(i);
list.add(i);
}
for(int i = 0; i < 3; i++){
set.remove(i);
list.remove(i);
}
System.out.println(set +" : " + list);
//会输出什么呢 ?
[-3, -2, -1] : [-2, 0, 2]
为什么 Set 输出的对了呢,List的输出的错了呢 这就是 重载的问题了,set.remove(i); 实际调用的是 Set.remove(E e); 可以理解是 Set.remove(Integer i);
这样 i 就会自动装箱到 Integer 了 输出的就是我们想要输出 而 list.remove(i); 调用的是 List.remove(int i); 它从列表指定的位置去除元素,如果从列表
[-3, -2, -1,0,1,2] 开始 去除第0个元素 是 -3,去除第 一个是 -1 ,第二个是 1 所以的到的 结果也是 必然的但是编译器不好检查出来罢了 知道问题出在哪里也就好解决了
for(int i = 0; i < 3; i++){
set.remove(i);
list.remove((Integer)i);
}
强转 为 Integer 就解决问题
输入
[-3, -2, -1] : [-3, -2, -1]
什么情况不要用重载呢 这点本人意见 不要写两个 参数个数一样的重载方法 ,这样容易混乱,如果方法的参数是可变的参数,请你不要重载它,不重载我们可以从新命名呗,这样会避免一些错误。
- Java 用重载的一些建议
- java的一些建议
- java编程的一些建议
- JAVA初学者的一些建议
- [C++]关于重载运算符的一些建议
- java程序编写的一些建议...
- 对JAVA初学者的一些建议
- 给Java初学者的一些建议
- 给java初学者的一些建议
- 学习java的一些小建议
- 给初来乍到的java学习者一些建议:
- java新手学习的一些建议
- java中重载重写的一些思考
- Overload java重载的一些笔记
- 给Java新手的一些建议----Java知识点归纳
- 给Java新手的一些建议(Java基础部分)
- 收录的一些建议
- alertView的一些建议
- java中public,private,protect,default区别
- Keras笔记(一)关于Keras模型
- 内存管理---非连续存储分配
- java权限管理知识总结
- 判断某一年是否是闰年
- Java 用重载的一些建议
- POJ 2619 Delta-wave 笔记
- leetcode之Best Time to Buy and Sell Stock III 问题
- 2.SpringMVC_RequesMapping
- Linux下ffmpeg的安装过程
- Java面试-关于线程方面的知识迷惑
- 03.10 Xshell优化与远程连接故障排查
- 简易在线留言板(下)——树洞留言板
- PAT+乙1005. 继续(3n+1)猜想