`

Java核心技术对泛型设计的总结(1) 限制与约束

阅读更多

1 Java 泛型设计中的一些主要限制和使用方面错误。

 

1.1 不能将泛型用在创建类型对象中,原因则是因为 Java 泛型中存在类型擦除的原因,所以会导致在 Java 虚拟机执行时,所有泛型类型都会相应的变为它的原始类型,这就意味着如果创建泛型对象则 Java 虚拟机会将创建的对象改变为 Object 这肯定不会是希望所应该有的目的。

 

1.2 不能将泛型应用在基本数据类型中,原因也是因为类型擦除机制的缘故,而基本类型不属于对象,如果要将基本类型应用到泛型当中则必须使用相应的包装器来做为替代方式。

 

1.3 不能将泛型用在异常捕获和用泛型来实现 Throwable 子类,如果这样做的会导致无法通过编译。

 

1.4 泛型数组是不合法的,原因同样出于类型擦除会导致创建的数组变为 Object ,而如果需要达到这样的目的,则必须使用类型信息中的 Class 类来满足要求。如果先创建一个类型数组而后转型为 Object 或是先声明类型数组而后创建一个 Object 数组通过强制类型转换来实现类型数组都将导致失败或者是类型擦除方面的问题。

 

1.5 无法将泛型用于静态的上下文中,原因同样还是出于类型擦除,如果允许这样实现则有可能使用泛型创建一个共享 Swing 构建或者 AWT 构建等一些会出现严重错误的缺陷。

 

1.6 使用泛型时应注意覆盖 equals 等方法的问题,原因是会导致编写出的代码导致一些难于发现的错误,但是表面上却很难让进行错误的查找。

 

1.7 在使用泛型时不能同时为两个接口的子类型,而这 2 个接口是同一个接口的不同参数,

这条限制可以理解为,如果 Employee 类实现了 Comparable<Employee> Manager 类继承了 Employee 类并且实现 Comparable<Manager> 接口,这样一来虽然子类和父类实现接口的约束条件是不同的,但是却是是想了同样的接口而该接口的类型参数又是父子的继承关系。则会与 Java 虚拟机合成的桥方法可能产生一些冲突。

 

Java 泛型的约束和限制的总结。经过阅读了 2 遍书籍和了解,感觉 Java 的泛型设计和 C# C++ Python (该语言经过一些了解虽然语言本身不显示包括泛型的概念,但是由于其是纯面向对象和一些语言特性,则它隐身的方法中都包含拥有泛型特点)等语言的泛型设计的不同是 Java 由于其历史原因包含了类型擦除的特点,所以导致了很多在其它同类语言中不存在的限制和要求,导致有些时候会出现很多难以发现和错误提示含糊不清或者难以理解的情况。

分享到:
评论

相关推荐

    很好的Java泛型的总结

    很好的Java泛型的总结,看完之后你一定会知道java泛型的底层机制,你一定会学会Java泛型!

    Java1_5泛型.zip

    Java1_5泛型,提高你的开发效率

    【java核心技术】泛型设计

    目录一、泛型概述二、泛型定义(1)泛型类(2)泛型方法2.1 泛型可变参数(3)泛型接口(4)类型限定三、泛型使用(1)类型通配符1.1 上限1.2 下限四、泛型擦除五、泛型数组 一、泛型概述 泛型,即是参数化类型。在...

    java 一个关于泛型的简单例子

    java 一个关于泛型的简单例子 java 一个关于泛型的简单例子 java 一个关于泛型的简单例子

    Java泛型和集合

    Java Generics and Collections 英文版,详细描述java 泛型技术

    4.java泛型的限制.zip

    4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip...

    全面总结Java泛型

    • 全面总结Ja• 全面总结Java泛型v• 全面总结Ja• 全面总结Java泛型va泛型a泛型• 全面• 全面总结Java泛型• 全面总结Java泛型总结Java泛• • 全面总结Java泛型全面总结Java泛型型• • 全面总结Java泛型全面...

    Java泛型技术之发展

    Java泛型技术之发展

    Java集合框架及泛型

    集合框架及泛型的介绍和基础理解,方便大家了解集合框架及泛型。

    java泛型总结

    深入理解java泛型,包括类名泛型的定义,方法泛型定义,泛型的返回

    java泛型技术之发展

    java泛型技术之发展,学习JAVA 泛型的不错东东

    【Flutter】Dart 泛型 ( 泛型类 泛型方法 特定类型约束的泛型 ).zip

    【Flutter】Dart 泛型 ( 泛型类 | 泛型方法 | 特定类型约束的泛型 ) https://hanshuliang.blog.csdn.net/article/details/114059611 博客源码快照

    Java泛型编程指南.pdf

    Java泛型编程指南.pdf 此文章译自SUN的泛型编程指南

    Java泛型不是真正的泛型

    详细的介绍了Java是伪泛型的原因,介绍了类型擦除的内容等。

    Java 实现泛型List

    Java 实现泛型List的源码,基本实现了List接口的全部所有方法。欢迎大家发表自己的观点和建议。

    Java.SE 自定义泛型与泛型的常见陷阱

    Java.SE 自定义泛型与泛型的常见陷阱Java.SE 自定义泛型与泛型的常见陷阱

    java Hashtable的泛型化

    java Hashtable的泛型化 java Hashtable的泛型化 java Hashtable的泛型化

    1.java泛型定义.zip

    1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1....

    JAVA泛型加减乘除

    这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...

Global site tag (gtag.js) - Google Analytics