作者NullLife (哀莫大於心死)
看板java
标题Re: [问题] 写method泛型时,遇到一个问题
时间Fri Nov 1 10:37:27 2013
嗯...是可以运作了,感谢sbrhsieh大大的回覆。
但是我想了很久,也试了一下我的想法,还是有问题,
public <ListType extends List<MapType>
,MapType extends Map<?, ?>>
void sort2(ListType targetList) {
// 内容...
}
之所以可以运作,是因为Map的key/value的型态我定为万用,
所以只要 targetList 属於 List 的子类别,
其List泛型 MapType 为 Map 的子类别,不管key/value的类别它都可以接受。
那当写成以下状况时
public <ListType extends List<MapType>
,MapType extends Map<KeyType, ValueType>
,KeyType
,ValueType>
void sort1(ListType targetList) {
// 内容...
}
是因为 KeyType 跟 ValueType 被定义为Object,
所以他认为Map<String, String> 不属於 Map<Object, Object>的子类别,
但是 KeyType 跟 ValueType 不是会根据我传入的物件而被定义型态吗?
所以之前我一直以为 KeyType 跟 ValueType 会定义为String...
还是因为 KeyType 跟 ValueType 没有任何传入参数的参考,
所以被定义为Object,那如果这样说的话
public <ListType extends List<MapType>
,MapType extends Map<? extends KeyType, ? extends ValueType>
,KeyType
,ValueType>
void sort1(ListType targetList) {
// 内容...
}
也只是让MapType的key跟value型态要为Object的子类别,
如此才会接受其传入变数为其子类别,
那这样 KeyType 跟 ValueType 又怎麽会是我传入变数的型态呢?
爬文了一下跟思考试着玩了一下,还是有点不解,烦请指点,感恩。
其实这个例子我省略了一个传入的变数,那就可以定义出KeyType的型态了,
只是最早遇到这个问题,一直没办法成功传入变数,
才想说先试着简化method,结果後来还是不行才来发问的。
然後我最早是把泛型写在物件上,
在建立物件的时候就把型态定义好,
但我後来在写method的时候又觉得,
阿型态在我要操作的变数上面就有了,
为什麽要要建立物件的时候再写一次,
所以我才想说把泛型写在method上。
对了,我还有一个疑问,
有办法限制泛型型态只能为其中两个类别吗?
例如KeyType我只想限定它为String或Integer这两种类别,有办法做到吗?
--
你只是大大的世界中小小的一个岛屿
在你怀中长大的我们 从未忘记
我要用全部的力气唱出对你的深情
歌声中 只是真心的赞美
929 吴志宁
也有感谢和依恋 疼惜和忧烦
全心全意爱你
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.250.61.200
※ 编辑: NullLife 来自: 111.250.61.200 (11/01 11:20)
1F:→ NewSpec:TIJ e/4花了很多篇幅在讲泛型行为, 你可以看一下 11/01 12:46
2F:→ NullLife:不好意思,请问楼上指的是...哪里的文章@@? 11/01 14:31
3F:→ NewSpec:Thinking in Java 第四版 11/01 14:42
4F:→ NullLife:感恩。 11/01 15:38