欢迎来到天天文库
浏览记录
ID:62303065
大小:131.63 KB
页数:7页
时间:2021-04-26
《Java泛型解析(04):约束和局限性.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、优选Java泛型解析(04):约束和局限性 前两节,认识和学习了泛型的限定以及通配符,初学者可能需要一些时间去体会到泛型程序设计的好处和力量,特别是想成为库程序员的同学就需要下去体会通配符的运用了,应用程序员则需要掌握怎么使用泛型,这里针对泛型的使用中的约束和局限性做一个介绍性的讲解。不能用基本类型实例化类型参数 这个很好理解,实例化泛型类时泛型参数不能使用基本类型,如List这是不合法的,要存储基本类型则可以利用基本类型的包装类如List、List2、le>等,下面补充一下八种基本类型对应的包装类,和默认初始值[code01]:[java]viewplaincopyprint?1.byte Byte 0 2.short Short 0 3.int Integer 0 4.long Long 0L 5.float 3、 FLoat 0.0F 6.double Double 0.0D 7.char Character 'u0000' 8.boolean Boolean false byteByte0shortShort0intInteger0longLong0LfloatFLoat0.0FdoubleDouble0.0DcharCharacter'u04、000'booleanBooleanfalse不能实例化类型参数 7/7优选Java中创建对象使用new关键字,但是泛型的类型参数不能用于实例化对象,如:[code02][java]viewplaincopyprint?1.public Couple() {wife = new T(); husband = new T();} // 错误 publicCouple(){wife=newT();husband=newT();}//错误 如果是在想要创建T对象,就必须使用Java反射来创建对象了5、,遗憾的是T.class在Java中也是不被支持使用的,所以一种弥补的方式,传入一个类型阐述为T的Class对象,如Class[code03][java]viewplaincopyprint?1. public static Couple createInstance(Class clazz) { 2. try { 3. return new Couple(clazz.newInstance(), clazz.6、newInstance()); 4. } catch (Exception e) { 5. return null ; 6. } 7.} publicstaticCouplecreateInstance(Classclazz){try{returnnewCouple(clazz.newInstance(),clazz.newInstance());}catch(Exceptione){returnn7、ull;}} 初学者对Java反射不熟悉不用着急,这里只要知道不能实例化类型参数即可,同理,不能实例化一个泛型数组,如[code04][java]viewplaincopyprint?1.public static T[] maxTwo(T[] values) {T[] array = new T[2];} // 错误 publicstaticT[]maxTwo(T[]values){T[]array=newT[2];}//错误 泛型构建数组是不合法的,因为这么构建在擦除之后构8、造的永远是new Object[2],这不是我们所希望的结果。而且这样会导致一些运行时错误。为了更进一步说明隐患问题,来看看下面代码:7/7优选[code05][java]viewplaincopyprint?1.public static > T[] maxTwo(T[] array) { 2. Object[] result = new Object[2]; 3. return (T[])
2、le>等,下面补充一下八种基本类型对应的包装类,和默认初始值[code01]:[java]viewplaincopyprint?1.byte Byte 0 2.short Short 0 3.int Integer 0 4.long Long 0L 5.float
3、 FLoat 0.0F 6.double Double 0.0D 7.char Character 'u0000' 8.boolean Boolean false byteByte0shortShort0intInteger0longLong0LfloatFLoat0.0FdoubleDouble0.0DcharCharacter'u0
4、000'booleanBooleanfalse不能实例化类型参数 7/7优选Java中创建对象使用new关键字,但是泛型的类型参数不能用于实例化对象,如:[code02][java]viewplaincopyprint?1.public Couple() {wife = new T(); husband = new T();} // 错误 publicCouple(){wife=newT();husband=newT();}//错误 如果是在想要创建T对象,就必须使用Java反射来创建对象了
5、,遗憾的是T.class在Java中也是不被支持使用的,所以一种弥补的方式,传入一个类型阐述为T的Class对象,如Class[code03][java]viewplaincopyprint?1. public static Couple createInstance(Class clazz) { 2. try { 3. return new Couple(clazz.newInstance(), clazz.
6、newInstance()); 4. } catch (Exception e) { 5. return null ; 6. } 7.} publicstaticCouplecreateInstance(Classclazz){try{returnnewCouple(clazz.newInstance(),clazz.newInstance());}catch(Exceptione){returnn
7、ull;}} 初学者对Java反射不熟悉不用着急,这里只要知道不能实例化类型参数即可,同理,不能实例化一个泛型数组,如[code04][java]viewplaincopyprint?1.public static T[] maxTwo(T[] values) {T[] array = new T[2];} // 错误 publicstaticT[]maxTwo(T[]values){T[]array=newT[2];}//错误 泛型构建数组是不合法的,因为这么构建在擦除之后构
8、造的永远是new Object[2],这不是我们所希望的结果。而且这样会导致一些运行时错误。为了更进一步说明隐患问题,来看看下面代码:7/7优选[code05][java]viewplaincopyprint?1.public static > T[] maxTwo(T[] array) { 2. Object[] result = new Object[2]; 3. return (T[])
此文档下载收益归作者所有