- 浏览: 746429 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (419)
- 杂软粉墨 (2)
- 创意灵感 (3)
- 经验记录 (137)
- 开源轨迹 (2)
- sip-communicator (2)
- 闲侃杂谈 (8)
- 问题交流 (24)
- 概念模式 (32)
- 难点备案 (5)
- JwChat (1)
- 中国象棋 (1)
- 教育探索 (6)
- 英语研究 (58)
- 星际争霸 (1)
- 电信知识 (1)
- 软件架构 (3)
- 哲学探索 (26)
- 算法灵魂 (8)
- 近视探索 (6)
- 数学数学 (3)
- 牛角钻尖 (23)
- 至强文言 (3)
- 数据结构 (1)
- 宇宙物理 (2)
- 网络架构 (3)
- 游戏领域 (4)
- 图形处理 (2)
- 修炼之路 (8)
- 读书天地 (20)
- 编解乱码 (2)
- 概念探索 (8)
- 格物致知 (1)
- 其它语言 (1)
- 测试领域 (3)
- 文化风流 (1)
- JQuery (1)
- 網頁領域 (1)
- Unix/Linux (1)
- Inside JVM (1)
- 异常分析 (1)
最新评论
-
suyujie:
引用
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
iamzhoug37:
您能说一下"局部变量不受文本顺序限制" 是 ...
声明前为什么能赋值却不能输出,都是使用
Effective Java 2rd ITEM 41: USE OVERLOADING JUDICIOUSLY
审慎地使用重载,看下面的例子,猜一下结果会是什么:
import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.TreeSet; public class SetList { public static void main(String[] args) { Set<Integer> set = new TreeSet<Integer>(); List<Integer> list = new ArrayList<Integer>(); for (int i = -3; i < 3; 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); } }
安全、保守的策略是不要设计两个具有相同参数的重载函数,除非参数类型差别很大,Two types are radically different if it is clearly impossible to cast an instance of either type to the other.
上例的结果是[-3, -2, -1] [-2, 0, 2],原因解释如下:
Here’s what’s happening: The call to set.remove(i) selects the overloading
remove(E), where E is the element type of the set (Integer), and autoboxes i
from int to Integer. This is the behavior you’d expect, so the program ends up
removing the positive values from the set. The call to list.remove(i), on the
other hand, selects the overloading remove(int i), which removes the element at
the specified position from a list. If you start with the list [-3, -2, -1, 0, 1, 2]
and remove the zeroth element, then the first, and then the second, you’re left with
[-2, 0, 2], and the mystery is solved. To fix the problem, cast list.remove’s
argument to Integer, forcing the correct overloading to be selected. Alternatively,
you could invoke Integer.valueOf on i and pass the result to list.remove.
Either way, the program prints [-3, -2, -1] [-3, -2, -1], as expected:
for (int i = 0; i < 3; i++) { set.remove(i); list.remove((Integer) i); // or remove(Integer.valueOf(i)) }
主要是说的Set的remove选择了remove(E)重载版本(只有这一个吧),而List选择了remove(i)
发表评论
-
关于方法访问控制符protected
2012-11-29 10:38 1261http://bbs.csdn.net/topics/3902 ... -
一个基本问题关于引用的
2012-05-15 10:20 1126问: int a = 1; Integer b = new ... -
我對面向對象和過程的理解。
2012-05-02 08:30 1064我的一些理解。 面向过程,是对客观现象的描述,感觉是有一个上 ... -
stack and heap
2012-01-13 23:17 1050我觉得是根据应用方式 和本身特性 才将内存分区的,目的是提 ... -
program experience conclusion
2011-07-11 15:35 10621. check parameters for validit ... -
PreparedStatement's possible designated parameter
2011-04-29 13:45 985though it's nearly impossible t ... -
clean Log4j
2011-04-12 11:19 1064import org.apache.log4j.BasicCo ... -
about abstract class
2011-04-02 10:34 865yes, we do know abstract class ... -
cvs operations on linux
2011-03-25 09:40 1008http://www.linuxhowtos.org/Syst ... -
regex to exchange two parts
2011-03-24 17:09 1087public class Test { public ... -
About the database locking
2011-03-09 11:02 962http://en.wikipedia.org/wiki/Lo ... -
how to send soap message in java
2011-03-08 10:29 1894import java.io.BufferedReader; ... -
About ShutDownDemo
2011-03-07 15:02 980public class ShutdownDemo { p ... -
How do you know if an explicit object casting is needed
2011-02-24 16:33 1186通俗来讲,不可能将一只是猫的动物强转为狗 再说Graphic ... -
有关MimeUtility
2011-02-24 13:11 3360import java.io.UnsupportedEncod ... -
C#连接sql server 2008的一件2事
2011-02-24 09:01 2151once upon a time, i came upon o ... -
Shadowing, Overriding, Hiding and Obscuring
2011-02-22 15:15 1163当子类属性与父类属性重叠时 这种叫法上是shadowi ... -
JAXP usage
2011-02-16 16:07 1096import java.io.ByteArrayInputSt ... -
运行一个类,如果classpath中路径带空格就加双引号
2011-02-11 11:25 2805注意是这样加: java -cp .;"d:\my ... -
关于ClassPath中的current directory
2011-01-28 16:40 1152Given: 1. package com.company. ...
相关推荐
Item 52: Use overloading judiciously Item 53: Use varargs judiciously Item 54: Return empty collections or arrays, not nulls Item 55: Return optionals judiciously Item 56: Write doc comments for all ...
"Overloading&Overriding" 在面向对象编程中,Overloading和Overriding是两个重要的概念,它们都是多态性的体现。下面我们将对这两个概念进行详细的解释。 1. 方法重载(Overloading) 方法重载是让类以统一的...
operator-overloading-js, JS简单运算符重载库 目录Operator-Overloading-JS安装工具node MODULE ( NPM )浏览器( Bower )Sneak示例重载运算符设计考虑/非常重要/必须阅读。Definig使用运算符重载的上下文
- **Function Overloading:** Use function overloading judiciously to provide a clear API. - **Default Arguments:** Default arguments can make functions more flexible but can also introduce ambiguity. -...
另一个重要的概念是过载(overloading)。在函数式编程中,过载通常指的是同一个函数名可以用于不同的数据类型。这是通过类型类(type classes)机制实现的,类型类定义了一组函数签名,任何实现了这些签名的类型都...
在C++编程语言中,函数重载(Function Overloading)是一项重要的特性,它允许我们在同一个作用域内定义多个同名但具有不同参数列表的函数。这样做的好处是能够为相似的操作提供简洁且易于理解的接口,同时提高了...
本文将深入探讨VB.NET中的三个关键概念:作用域(Scoping)、重载(Overloading)和覆盖(Overriding),这些都是理解和编写高效、可维护的VB.NET代码的基础。 1. **作用域(Scoping)**: 作用域决定了变量、常量...
函数重载(Overloading) 在C++中,函数重载是指允许定义多个同名函数,但这些函数必须具有不同的参数列表(参数类型、个数或顺序不同)。通过这种方式,可以根据不同的输入提供不同的行为。 - **示例**:假设有...
在“软件设计课件:Lecture 07 C++ Operator Overloading.ppt”中,该主题深入探讨了这个概念及其在实际编程中的应用。 首先,运算符重载的基本思想是赋予已存在的运算符新的含义,使得当这些运算符用于不同的数据...
- **Software Engineering: When to Use Overloading:** Provides guidelines on when to use overloading. - **C++ Compared with Java:** Continues the comparison. ### Chapter 6: Templates and Generic ...
在C++编程语言中,操作符重载和复制构造函数是两个高级特性,它们允许程序员扩展标准操作符的功能,以适应自定义类的行为,同时控制对象的复制过程。 操作符重载允许程序员为类定义的操作符提供特定的实现,使得...
关于C++操作符重载的一个文档。有了它,关于操作符重载的东西你就不用再找资料拉~
"VC.data.operator.overloading.rar_The Operator"这个资源很可能包含了一些关于在Visual C++环境下如何有效地使用和实现运算符重载的经典教程和示例。 运算符重载并不创建新的运算符,而是给已有的运算符赋予新的...
Python是一种解释型的、面向对象的、带有动态语义的高级程序设计语言。它是由荷兰人吉多·罗萨姆于1989年发布的,第一个公开发行版发行于1991年。Python注重解决问题的方法,而不是语法和结构。...
Use operator overloading Extend classes with inheritance Use polymorphism and derived classes Employ object-oriented analysis and design Table of Contents Part I: Beginning C++ HOUR 1: Writing Your ...
在编程语言中,"Overloading" 是一个重要的概念,尤其在 C# 这样的面向对象的语言中。"Overloading",中文通常称为“重载”或“多态性的一种表现形式”,指的是在同一个作用域内可以有多个同名但参数列表不同的函数...
Java编程语言提供了一种强大的特性,称为方法重载(overloading),它允许我们在同一个类中定义多个具有相同名称但参数列表不同的方法。本教程将深入探讨如何在重载方法中利用Varargs(可变参数)技术,这是一项非常...
在这个项目"oop-java-overloading-KovacsAliz"中,我们将深入探讨Java中的一个关键概念——方法重载(Method Overloading)以及构造函数的应用。 方法重载是Java中实现多态性的一种方式,允许在一个类中定义多个...
C++中的运算符重载是面向对象编程的一个关键特性,它允许我们为用户自定义类型定义运算符的行为,使得这些类型能够像内置类型(如int、float等)一样使用标准运算符。运算符重载并不创建新的运算符,而是对已有...