快速业务通道

在Eclipse 3.1中体验J2SE 5.0的新特性: 第三部分 :范型 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
ap<String, String> gm2 = new GenMap<String, String> ();

上例中, T和V虽然看起来是两个不同的类型参数, 但是在使用这个范型类的时候, T和 V很有可能被替换成同一种类型. 因此在声明多个类型参数的范型类时, 要注意避免这种 二义性错误, 例如,

清单10, 二义性错误

public class GenMap<T, V> {    //编译错误, 二义性错误    public void set(T t){}    public void set(V v){} }

在上面这段代码, 如果T和V被替换成同一种类型, set函数的签名(signature)就是完 全一样的, 所以编译器会报告二义性错误. 正确的用法是声明2个不同名的方法, 例 如,

清单10, 二义性错误

public class GenMap<T, V> {    public void setKey(T t){}    public void setValue(V v){} }

图3.3.3 二义性错误

在Eclipse 3.1中体验J2SE 5.0的新特性: 第三部分 :范型 - 编程入门网

在Eclipse 3.1中体验J2SE 5.0的新特性: 第三部分 :范型(5)

时间:2011-04-02 IBM 邹青 吴嫣 吴疆

3.3.4 使用通配符

前面我们创建了范型的列表, 如果我需要一个方法来处理范型列表, 例如, 我们希望 把列表中的每个元素都打印出来, 但是类型参数(type parameter)只能使用在声明一个范 型类的时候, 如果类型参数使用在函数定义里会导致编译错误

public static void print(GenList<T> list){}  //编译错误

在这种情况下, 我们需要用另外一种方法来表示一个范型类, 否则, 就可能需要书写 多个print函数

public static void print(GenList<Integer> list){} public static void print(GenList<Double> list){} … public static void print(GenList<String> list){}

J2SE 5.0中提供了范型的通配符"?", "?"可以用来代替任何类型, 例如使用通配符来 实现print方法

public static void print(GenList<?> list) {}

3.4. 范型的一些局限型

(1) 类型参数不能实例化, 例如,

T t= new T();  //编译错误

(2) 不能实例化类型参数的数组

T[] ts= new T[10];  //编译错误

(3) 类的静态变量不能声明为类型参数类型

public class GenClass<T> {    private static T t;  //编译错误 }

(4) 范型类不能继承自Throwable以及其子类

public GenExpection<T> extends Exception{}  //编译错误

3.5.范型小结

范型是J2SE 5.0所提供的一项强大的功能, 使用范型可以创建类型安全的、可重用的 代码, 虽然目前Java的范型还无法和C++的范型相提并论, 但是, 随着Java语言本事的演 进, 范型会在Java语言中发挥更大的作用的.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号