锁定老帖子 主题:关于Java泛型 与 类型推断
精华帖 (0) :: 良好帖 (3) :: 新手帖 (1) :: 隐藏帖 (12)
|
|
---|---|
作者 | 正文 |
发表时间:2012-02-13
当编译器解析泛型时,设法推断类型参数它能达到的最具 体类型。 我想关于这一点并不陌生,关于类型推断当然不止限于泛型的应用。当然现在这个问题是与泛型相关的,所以我们只讨论泛型的类型推断。 public static<T> T identity(T arg) { return arg }; 和它的调用: Integer i = 3; System.out.println(identity(i)); 编译器能够推断 T 是 Integer、Number、 Serializable 或 Object,但它 选择 Integer 作为满足约束的最具体类型。 但是在我们用通配符的时候编译的推断却很“弱智” 假设有下面的情况:Fruit 为父类,Apple为子类。 List<Apple> apples = new ArrayList<Apple>(); List<? extends Fruit> fruits = apples; 现在fruits里面加不进去任何的对象。 List<? extends Fruit> 表示是: 一个存放Fruit子类型的List。 但是我们将apples赋值给了fruits ,那么这个时候为什么编译器却不推断:fruits 的类型为:List<Apple>列? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-02-13
有人说我的想法是错的,那么假设现在有这么种情况:
public void foo(Object o) public void foo(String str) 现在有这么一个调用:foo("123");他会调用foo(String str)这个方法,那这个就是类型推断了。。他可以推断到最具体的类型。 但是为什么贴子中的类型他就不能推断了列? |
|
返回顶楼 | |
发表时间:2012-02-13
没有人。~
|
|
返回顶楼 | |
发表时间:2012-02-13
lz你需要的是动态语言
|
|
返回顶楼 | |
发表时间:2012-02-13
楼主需要的是PECS口诀。《Effective Java》第二版原文版的136页。
|
|
返回顶楼 | |
发表时间:2012-02-13
RednaxelaFX 写道 楼主需要的是PECS口诀。《Effective Java》第二版原文版的136页。
烧香,拜拜~~ 神啊。 136页都能记下来 |
|
返回顶楼 | |
发表时间:2012-02-13
RednaxelaFX 写道 楼主需要的是PECS口诀。《Effective Java》第二版原文版的136页。
PECS口诀时什么呀? |
|
返回顶楼 | |
发表时间:2012-02-14
最后修改:2012-02-14
Java的泛型一直搞不懂...
|
|
返回顶楼 | |
发表时间:2012-02-14
List<Fruit> fruits = new ArrayList();
fruits.add(new Apple()); 我想楼主是想多了 |
|
返回顶楼 | |
发表时间:2012-02-14
List<? super Fruit> list = new ArrayList<Apple>();
list.add(new Apple()); list.add(new Fruit()); |
|
返回顶楼 | |