怎么重载怎么读啊

下面两个方法,在同事的Eclipse中编译通过(JDK 1.6.0_30),
在我的机器的Eclipse中编译通不过(试过JDK 1.6.0_24和JDK 1.6.0_31)。
代码如下:
public &E extends IBean& E getBeanById(Class&E& clazz, int id) {
private &E& E getBeanById(Class&E& clazz, int id) {
两个名字和参数都一样的方法,应该不构成重载才对,但为什么同事的机器上可以编译通过,求解
问题补充:同事的的确编译通过,clean好几次了,longxiaoyan 写道确认你同事的Eclipse已经编译了这个类?执行project-》clean看看。
问题补充:同时的确编译通过,这就是我疑惑的地方chen_yongkai 写道肯定有编译错误的:Method getBeanById(Class&E&, int) has the same erasure getBeanById(Class&T&, int) as another method
你同事不会跟你开玩笑吧!
问题补充:下面这个两个方法,在我同事那还是编译通过,在我机器上一样通不过
public static int sum(List&Integer& ints) {
int sum = 0;
for (int i : ints) sum +=
public static String sum(List&String& strings) {
StringBuffer sum = new StringBuffer();
for (String s : strings) sum.append(s);
return sum.toString();
问题补充:会不是因为eclipse版本对于语法解析不一样的问题,同事的是3.4,我的是3.6
你的eclipse肯定是用的默认的编译器。。你同事的肯定用的sun的。。
其实存在一个泛型 擦除的问题
Java语法糖的味道:泛型与类型擦除
/lifelikejava/blog/item/5956753aacbbbd8ea8018e4b.html
详细看看这个 。
泛型遇见重载
public static int sum(List&Integer& ints) {
int sum = 0;
for (int i : ints) sum +=
public static String sum(List&String& strings) {
StringBuffer sum = new StringBuffer();
for (String s : strings) sum.append(s);
return sum.toString();
(使用Sun JDK的Javac编译器进行编译通过,其他编译器,如Eclipse JDT的ECJ编译器,仍然可能会拒绝编译这段代码,ECJ编译时会提示“Method method(List&String&) has the same erasure method(List&E&) as another method in type GenericTypes”。)
名字和参数都一样的方法肯定不是重载了,叫你同事写个main方法调用看看,会出错吧。
肯定有编译错误的:Method getBeanById(Class&E&, int) has the same erasure getBeanById(Class&T&, int) as another method
你同事不会跟你开玩笑吧!
确认你同事的Eclipse已经编译了这个类?执行project-》clean看看。
已解决问题
未解决问题查看: 86|回复: 6
最后登录QQ注册时间阅读权限50精华0帖子
咕噜, 积分 1157, 距离下一级还需 43 积分
性别男幸福币0 经验986 帖子
玩家版主特有勋章,请认准此标志。有效期 30 天,“玩家版主”身份可自主申请。
活动推荐 /1
根据腾讯平台“开放平台团队”发展的需要,现招成员若干名,有兴趣的玩家可以往下看>>查看:3443|回复:3
对于JAVA中方法的重载和覆盖,具体在什么时候用,我很模糊,求大神赐教
你应该去看看《Java学习手记》啦。
这是这本书里面的内容:
在继承中,子类不但可以继承自父类中的属性和方法,还可以增加子类自身的属性和方法。子类可以通过成员变量的隐藏和成员方法的重写,把父类的属性和方法改变为子类自身的属性和方法。如果子类中定义的方法使用的方法名、返回类型和参数列表与父类中的方法一样,则称为子类的方法重写了父类方法。
子类方法重写父类的方法,利用方法的重写,可以重定义父类中的方法。方法重写只存在于子类和父类之间,同一个类中只能重载。
初级工程师
实际应用中,一班在工程搭建时用的比较多。
工程要求代码重用度最大,代码扩展性最高。
所以在设计中,常常要考虑到重写,继承,重
载等java特性。
简单的说,同样的方法需要用不同参数的时候,就重载。比如找一个同事,你可以根据工号找,可以根据名字找,可以根据工位位置找,那么“找同事()”方法就可以重载三次。
子类对父类方法有不同实现的时候,就覆盖。比如你和你爸都拿筷子吃饭,但你爸是左撇子你不是,那你就得重写你爸遗传给你的“拿筷子()”方法,否则你也得操练操练左手才行。Java方法参数太多怎么办—Part4—重载 - ImportNew
| 分类: ,
本文是这个系列的第四篇文章,介绍了通过重载解决参数过多的问题。如果你也希望参与类似的系列文章翻译,可以加入我们的和小组。
在Java编程中,如果一个方法带太多的参数被会给调用者带来很多困扰。调用者必须考虑是否按照正确的参数顺序给传入合适的值。在前面的文章中,先后探讨了通过、、来解决这个问题。还有一种方法,也是今天探讨的主题——通过方法重载来应对各种不同需求。与往常一样,在文章最后我会对重载的优缺点进行总结。
Java支持方法重载,可以通过方法签名来区分同名方法之间是否重载。请注意:方法返回值不能作为判断是否重载的依据(请大家注意)。
实际编程中可能会有很多理由让你使用重载。其中一个是为不同类型实现同样的功能(特别是方法不适合通过支持多种类型,或者编写代码的环境不支持泛型)。、、、、以及其它类型String.valule()方法就是方法重载的一个简单示例。
选择重载的另一个原因是方便客户调用时“按需分配”。客户能根据需要的参数选择相应实现方法,这样可以避免传一个或多个null值或可选参数。例如java.util包中的类就使用重载方法,可供选择的构造函数多种多样,像是、和等。
重载构造函数会产生多个不同的构造函数,每个构造函数接收的参数数量各不相同。这些构造函数又叫做,一些人。事实上,在中,作者Josh Bloch提到:“之所以使用,其中一个原因就是重叠构造器模式本身有缺陷。”顺便说一下,针对实现前面提到的目标,Date类也提供了一些重载的构造函数,支持。
自己编写类时,可以通过重载构造函数和方法,只接收必需的参数或者尽可能减少必须的参数。下面的示例代码中,首先展示了一段问题代码——方法接受的参数过多;接下来展示了一些通过重载精简参数后的若干备选方案。为了便于讨论,我们假定重写过的方法签名中所有参数都是必须的,在调用时都必须填写。示例代码在注释中对方法过程中的一些假设进行了说明。
函数参数过多及重载改进示例代码
* 生成Person实例。
* 此方法要求初始化Person实例时,所有属性都必须有值。
* 可选或不可用属性传null。
* @param lastName
* @param firstName
* @param middleName
* @param salutation
* @param suffix
* @param streetAddress
* @param city
* @param state
* @param isFemale
* @param isEmployed
* @param isHomeOwner
* @return A Person object.
public Person createPerson(
final String lastName,
final String firstName,
final String middleName,
final String salutation,
final String suffix,
final String streetAddress,
final String city,
final String state,
final boolean isFemale,
final boolean isEmployed,
final boolean isHomeOwner)
// implementation goes here...
* 生成Person实例。
* Person初始化必须提供姓名和地址信息。
* 对其它没有初始化的Person属性不赋初值。
* @param lastName
* @param firstName
* @param streetAddress
* @param city
* @param state
* @return 返回的Person实例对中间名、性别、雇员状态或房屋所有权均不赋初值。
public Person createPerson(
final String lastName,
final String firstName,
final String streetAddress,
final String city,
final String state)
// implementation goes here...
* 生成的Persn实例没有中间名但指定了房屋所有权状态。
* 该方法返回的所有Person实例都假定为已雇佣女性,但不提供地址信息。
* @param lastName
* @param firstName
* @param homeOwnerStatus
* @return Person实例,包含姓名和房屋所有权状态,并且假定为已雇佣女性、不包含地址信息。
public Person createPerson(
final String lastName,
final String firstName,
final boolean homeOwnerStatus)
// implementation goes here...
示例代码中的注释说明了各方法间的区别。第一个方法要求初始化Person实例时,所有属性都必须赋值。如果碰到有一些可选参数或参数不可用,参数传入null(比如这个人可能没有中间名middle name,或者某种情况下无需考虑中间名)。第二种方法重载不要求为所有属性赋值,返回的Person实例对没有设置的参数不进行赋值。
第三种方法重载的主要特点是一些属性不提供参数赋值。例如,方法假定实例化的Person都是女性且都是雇员。然而,这三种方法不能实例化一个男性或没有雇佣关系的Person。这从侧面说明了简单地使用方法重载来处理参数过多问题的一个短板(即只能通过参数个数和不同类型重载名称相同方法,这里请注意与重写Override区别)。
虽然示例代码列中没有提到构造函数,但其中的观点和方法对构造函数同样适用。同样地,构造函数重载和方法重载具有共同的优点与不足。
重载的好处和优点
在Java中进行方法重载看起来很好理解,在其它的一些编程语言比如、中,方法重载也非常普遍。特别是遇到可选参数时,使用方法重载会十分有效。在上面的示例中,使用方法重载移除中间名参数要比假定为所有雇员都是女性更好。如果中间名、性别、雇佣情况确实可选,最好不要多此一举为它们设定特殊默认值。
重载的代价和缺点
适当的方法重载非常有用,但同时使用起来也要格外小心。系列教程中对的提到:要尽量少用方法重载,避免降低代码的可读性。
甚至在上面三个简单示例中也可以发现,方法重载会明显降低代码的可读性。在前文的示例中,开发者在阅读和使用代码时一方面要认真阅读并且准确理解注释,另一方面要深入到方法实现中才能发现各重载方法的区别。对编译器而言,如果存在多个版本的重载方法很难做到“具体问题具体分析”。
在示例代码中,方法注释必须清楚地解释每个重载方法进行的假设。正如刚才说的那样,如果代码的作者不屑于写好注释,那么这些重载的方法可能过时、不准确以致让别人不知所云。显然,为不同的方法取不同的名字效果会更好,至少方法名可以为理解方法的功能提供一些线索,而不仅仅只依靠注释。使用不同的方法名会在后面的文章中进行讨论。
代码示例中也体现了多个相同类型参数的重载方法的一个严重限制。第三个方法只提供了一个boolean参数,只有通过阅读注释和参数名才能知道这个方法只关心是否拥有房产,并不关心性别和雇佣状态。在只提供相同的方法名时,想要通过boolean参数代表Person的性别、雇佣情况等其他特征是不可能的。这种情况下,由于方法签名相同使用方法重载是行不通的。这再一次表明,必须采用不同的方法名来具体区分boolean参数要表达的隐含内容。
突破方法重载限制的另一个方法是单独或统一使用自定义类型和参数对象,提供各种版本的重载方法来接收不同的自定义类型组合。下面的示例代码展示了如何使用自定义类型进行方法重载。这些重载方法接收两个string参数和一个适用于三种情况的自定义类型参数,这样就不必使用相同的boolean参数了。
使用自定义类型改进方法、构造函数重载
public Person createPerson(
final String lastName,
final String firstName,
final HomeownerStatus homeOwnership)
// implementation goes here...
public Person createPerson(
final String lastName,
final String firstName,
final Gender gender)
// implementation goes here...
public Person createPerson(
final String lastName,
final String firstName,
final EmploymentStatus employmentStatus)
// implementation goes here...
关于方法重载的缺点,我想再补充一下。使用方法重载应对有构造函数或方法参数过多会带来大量的维护工作。在任何情况下,类(构造函数)属性或方法参数的增加、删除甚至是改变都会带来额外的审查或代码变更。
方法重载确实有其适用的地方,并且可以提高方法和构造函数的可读性。但是在我看来,方法重载不及前面几篇中(、、)提到的方法,比起即将要介绍的一些方法(比如方法命名)也用得更少。通过结合其他方法可以改善方法重载的一些限制和不足,比如使用自定义类型和参数对象能够显著改善重载方法或构造函数对细粒度问题的处理能力。
原文链接:
- 译文链接: [ 转载请保留原文出处、译者和译文链接。]
关于作者:
(新浪微博:)
微信关注: ImportNew
分享Java相关的技术文章、工具资源和热点资讯。扫描加关注,碎片时间提高Java开发技能!
In javadoc:description of
hashcode() function: Wh...
关于ImportNew
ImportNew 专注于 Java 技术分享。于日 11:11正式上线。是的,这是一个很特别的时刻 :)
ImportNew 由两个 Java 关键字 import 和 new 组成,意指:Java 开发者学习新知识的网站。 import 可认为是学习和吸收, new 则可认为是新知识、新技术圈子和新朋友……
– 写了文章?看干货?去头条!
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 活跃 & 专业的翻译小组
– 国内外的精选博客文章
– JavaScript, HTML5, CSS
– 专注Android技术分享
– 专注iOS技术分享
– 专注Java技术分享
– 专注Python技术分享
新浪微博:
微信号:importnew
反馈建议:@
广告与商务合作QQ:
& 2015 ImportNewpython怎么重载in关键字_python吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:34,688贴子:
python怎么重载in关键字收藏
创建一个类,和时间有关的,有start_time和stop_time这两个,我想重载in关键字,使:test.start_time = 12:00test.stop_time = 15:0014:00 in test 为True应该怎么样弄呀?
好像重载一下 __contains__就可以了。
class test:……start_time = "12:00"……stop_time = "15:00"……def __contains__(self,t):…………return self.start_time&=t&=self.stop_timeb=test()print("13:10" in b)
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 wow怎么重载界面 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信