`

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泛型技术之发展

    - **类型参数约束**:可以对类型参数施加限制,如 `&lt;T extends Number&gt;`,表示T必须是Number或其子类。 - **泛型类**:带有类型参数的类,如 `ArrayList&lt;T&gt;`。 - **泛型方法**:带有类型参数的方法,如 `public ...

    Java 理论和实践 了解泛型

    2. 泛型约束:可以为类型参数设定边界,如`class Box&lt;T extends Number&gt;`,限制`T`只能是Number或其子类。 3. 泛型方法:在方法定义中也可以使用泛型,如`public &lt;T&gt; void print(T item)`,`T`是方法级别的类型参数...

    Java深度历险之Java泛型.docx

    #### 三、Java泛型的限制与挑战 尽管Java泛型带来了诸多好处,但其设计也存在一定的局限性和挑战: 1. **类型擦除**:Java泛型的本质是在编译器层面实现的,这意味着编译后的字节码并不包含泛型中的类型信息。这一...

    Java1.5泛型指南中文版.doc

    ### Java 1.5 泛型指南中文版知识点解析 ...以上是对Java 1.5泛型指南中文版的一些核心概念和关键知识点的总结。这些知识点涵盖了从基础到高级的泛型使用技巧,对于学习和应用Java泛型具有重要的指导意义。

    myreflect.rar 反射和泛型使用源码

    这些示例将帮助你深化对这两个核心Java特性的掌握,并提升编程能力。 总的来说,Java反射提供了运行时的动态能力,而泛型则在编译时提高了类型安全性。结合使用,开发者可以构建更加灵活且安全的系统。通过学习和...

    565.563.JAVA基础教程_泛型与File-为什么要使用泛型(565).rar

    3. **边界约束:** 我们可以限制类型参数的类型,例如`List&lt;? extends Number&gt;`表示列表中的元素是Number的子类。 4. **通配符:** 通配符`?`用于表示任意类型,如`List&lt;?&gt;`表示可以存储任何类型的数据,但不能进行...

    Java 基础泛型.pdf

    Java泛型是Java编程语言中的...综上所述,Java泛型通过引入类型参数和相关的约束,极大地增强了代码的灵活性和安全性。在实际开发中,熟练掌握和运用泛型能够提高代码质量,降低维护成本,是Java程序员必备的技能之一。

    JAVA的泛型指南

    #### 一、绪言:理解JAVA泛型的重要性与应用场景 在Java 5中引入的泛型是一个重要的语言特性,它允许开发者在编写类或接口时使用类型参数来实现类型的安全性和重用性。通过泛型,开发者能够指定集合中的元素类型或...

    JAVA泛型详解

    ### JAVA泛型详解 #### 泛型:打破具体类型的枷锁 在传统的Java编程中,类和方法的...尽管泛型在设计上有所局限,但其在增强代码复用性和减少运行时错误方面的贡献不容忽视,为Java开发者提供了更为广阔的设计空间。

    [Java泛型和集合].(Java.Generics.and.Collections).Maurice.Naftalin&Philip.Wadler.文字版

    《Java泛型与集合》由Maurice Naftalin与Philip Wadler合著,是一部深入...通过学习本书,读者将能够掌握Java泛型的核心技术,提高代码的质量和可维护性,同时充分利用集合框架的强大功能,构建高效、灵活的应用程序。

    学习泛型语法3

    标题"学习泛型语法3"表明我们将深入探讨泛型的高级用法和实践,这通常包括对之前学习的泛型语法1和泛型语法2的巩固和扩展。 在描述中提到,“泛型语法1 和 泛型语法2 练习实例”意味着我们已经接触过泛型的基本概念...

    21-04-03_FactoryPattern(001_在工厂模式下以通过接口结合列表、泛型和反射等方式实现指定类型的实例化操作_控制台).rar

    在工厂模式中,我们可以使用泛型来限制工厂方法的返回类型,确保返回的对象符合特定的类型约束。例如,我们定义一个泛型接口`Factory&lt;T&gt;`,其中`T`代表我们需要创建的对象类型,然后在实现该接口的具体工厂类中,...

    Java程序设计(雍俊海)ch05

    总结来说,雍俊海教授的《Java程序设计教程》第五章涵盖了泛型的定义和使用,枚举的创建以及for-each循环的语法,这些都是Java程序员必须掌握的核心知识。通过学习这些内容,读者能够编写出更加安全、高效且易于理解...

    jdk1.5新特性,泛型,for:each

    2. **类型参数约束**:可以限制类型参数的类型,如`&lt;T extends Number&gt;`,表示T必须是Number或其子类。 3. **通配符**:用于表示任意类型,如`?`,或者带有上限或下限的通配符,如`&lt;? extends Number&gt;`和`...

    java笔试试题整理

    11. **Java EE**:如果面试涉及Web开发,那么对Servlet、JSP、JDBC、EJB、Spring、Hibernate等Java企业版技术的理解也是必不可少的。 12. **Java 8及更高版本的新特性**:例如lambda表达式、流(Stream API)、...

    Implementing Generics from JDK 5.0

    - **书籍**:《Effective Java》、《Java核心技术卷I》等书籍深入介绍了泛型的相关知识。 - **社区论坛**:Stack Overflow、Java Ranch等社区是解决具体问题的好地方。 #### 使用泛型的初步方法 在实际应用中,...

    A.Field.Guide.to.Generic.Programming

    2. 泛型编程语言特性:书中将详细讨论支持泛型编程的各种编程语言,如C++的模板、Java的泛型、C#的泛型、Python的元类等,以及它们在实现泛型时的不同策略和限制。 3. 设计和实现泛型:这一部分会深入到泛型设计...

    JDK5.0新特征

    泛型是Java 5.0中引入的核心特性,它的目标是增强类型安全性和代码的可读性。在泛型出现之前,Java程序员经常需要在运行时检查容器中的对象类型,这可能导致类型转换异常(ClassCastException)。泛型通过在编译时...

    generic programming.pdf

    ### 泛型编程的核心概念与应用 #### 一、引言 泛型编程(Generic Programming)作为一种编程范式,其核心在于设计出可重用且高效的算法集合。它不仅仅局限于特定的数据类型,而是通过参数化类型的方式使得同一段...

Global site tag (gtag.js) - Google Analytics