标题:泛型重载
只看楼主
jsRank
Rank: 5Rank: 5
等 级:职业侠客
威 望:6
帖 子:69
专家分:303
注 册:2015-5-11
结帖率:66.67%
已结贴  问题点数:20 回复次数:9 
泛型重载
例:
public class Main<T>{
    public boolean equals(T obj){
        return true;
    }
};
该泛型类会在编译时擦除,成为:
 public class Main{
    public boolean equals(Object obj){
        return true;
    }
};
擦除后的equals方法和Object.equals方法的一样,但是为什么不能重写呢,会报编译错误
搜索更多相关主题的帖子: Object public return equals 
2015-09-08 11:33
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
程序代码:
public class Main<T extends Object>{
    public boolean equals(T obj){
        return true;
    }
};

剑栈风樯各苦辛,别时冰雪到时春
2015-09-08 11:36
jsRank
Rank: 5Rank: 5
等 级:职业侠客
威 望:6
帖 子:69
专家分:303
注 册:2015-5-11
得分:0 
回复 2楼 林月儿
你试了吗,不好使,亲

追求卓越,成功就会跟着你走!
2015-09-08 11:38
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
回复 3楼 jsRank
Name clash: The method equals(T) of type Main<T> has the same erasure as equals(Object) of type Object but does not override it
额,确实不好使

剑栈风樯各苦辛,别时冰雪到时春
2015-09-08 11:42
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
程序代码:
public class Main<T extends Object>{
    int a;
    @Override
    public boolean equals(Object obj) {
        return true;
    }
    
};

剑栈风樯各苦辛,别时冰雪到时春
2015-09-08 11:43
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
回复 3楼 jsRank
无成员不好使。。。

剑栈风樯各苦辛,别时冰雪到时春
2015-09-08 11:46
jsRank
Rank: 5Rank: 5
等 级:职业侠客
威 望:6
帖 子:69
专家分:303
注 册:2015-5-11
得分:0 
回复 6楼 林月儿
跟成员没关系,你把成员删了照样好使。
你都把我原来的方法给改了,我是equals(T obj),你都给我改成equals(Object obj)了,我的问题是我那么写为什么不行,而不是应该怎么写

追求卓越,成功就会跟着你走!
2015-09-08 12:10
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
回复 7楼 jsRank
不知道诶

剑栈风樯各苦辛,别时冰雪到时春
2015-09-08 12:19
calix
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:249
专家分:1442
注 册:2015-5-4
得分:20 
由于你的equals参数类型不相同,编译器根据方法签名(方法名+参数列表)判断认为是一个新方法
但是进行泛型擦除后出现了两个相同的equals方法,这块编译器就走不下去了

你打算用Main的实例跟T类型对象进行比较?
2015-09-09 09:34
jsRank
Rank: 5Rank: 5
等 级:职业侠客
威 望:6
帖 子:69
专家分:303
注 册:2015-5-11
得分:0 
回复 9楼 calix
恩,编译器是先判断能否重载,然后才进行擦除。这个是有先后顺序的。

追求卓越,成功就会跟着你走!
2015-09-15 08:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-457093-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.255760 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved