`
黑麦伪司机
  • 浏览: 473 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

java特别基础之泛型

阅读更多

java特别基础之泛型

目的:面向对象对代码重用的支持,其中一个重要的机制就是泛型
泛型的使用方式
如果除去对象的基本类型以外,实现方法是相同的,那么就可以用泛型实现来描 述这种基本的功能
两个细节
1.使用时必须强转成正确的类型
2.不能使用基本类型,只有引用类型能与Object相容(但可以使用包装类)
自动装箱\拆箱
如果一个int型量被传递到需要一个Integer对象的地方,那么编译器将在幕后插入个对Integer构造方法的调用,即自动装箱
如果一个Integer对象被放到需要int型量的地方,则编译器将在幕后插入一个对intValue()方法的调用,即自动拆箱
IS-A关系
public static Comparable findMax(Comparable[] arr){
    int maxIndex = 0;

    for (int i = 1; i < arr.length; i++)
        if (arr[i].compareTo(arr[maxIndex]) > 0)
            maxIndex = i;

    return arr[maxIndex];
}
 
1.仅有compareTo方法但未宣称实现Comparable接口的对象不是Comparable的,他不具有IS-A关系
2.如果所传参数Comparable[]中存在不相容的对象,那么CompareTo()方法将抛出异常ClassCastException
3.基础类型能通过其包装类作为Comparable传递,因为包装类实现了Comparable
4.接口究竟是不是标准库的接口倒不是必需(意思是:泛型也对非标准java库接口适用!?)
5.方案不是总能行得通(之后有function 参数),如:包装类,但接口是用户自定义接口。又或者是个final类
协变数组类型
数组兼容对象的类型
(非协变)每个数组都明确它所允许存储的对象的类型
协变性解析
totalArea(Shape[] arr){} 此处用数组具有协变性
totalArea(Collection<Shape> arr){} 此处用集合协变性消失
totalArea(Collection<? extends Shape> arr){} 此处引入通配符重新使对象具有协变性
1.使类具有泛型
public class Tree <AnyType extends Comparable<? super AnyType>> {}
 
2.使某方法参数能使用泛型(不需要类是泛型):
    public static<AnyType> AnyType findMax(){ return val; }
类型界限
1.public static<AnyType extends Comparable>
AnyType findMax(AnyType[] arr){}
(1.写法不太好)
现在假设Square继承Shape,可得Square实现Comparable<Shape>,可得Square IS-A Comparable<Shape>,但是不能得到Square IS-A Comparable<Square>
2.public static<AnyType extends Comparable<? super AnyType>> AnyType findMax(AnyType[] arr){}
这是为了使用Compable接口中的compareTo()方法
 
0
0
分享到:
评论

相关推荐

    关于java基础的泛型的练习

    Java泛型是Java SE 5.0引入的一个重要特性,它极大地增强了代码的类型安全...在进行"关于Java基础的泛型的练习"时,可以尝试编写不同的泛型类、泛型方法,体验泛型带来的便利,并理解其背后的类型系统和类型擦除机制。

    Java基础入门四泛型反射注解.pdf

    Java作为云计算环境下编写应用和服务的主要语言之一,其泛型、反射和注解等高级特性为构建云计算平台上的应用提供了便利,从而满足不断变化的业务需求。 学习Java编程,特别是泛型、反射和注解这些高级特性,对于想...

    java泛型指南 经典

    因此,在运行时,所有泛型类型看起来都像是它们的基础类型。例如,`List&lt;Integer&gt;` 和 `List&lt;String&gt;` 在运行时都表现为 `List` 类型。 ##### 6.3 在老代码中使用泛型代码 当我们在非泛型代码中使用泛型代码时,...

    java基础泛型 学习全文件

    Java基础泛型是Java编程语言中的一个重要特性,它允许在类、接口和方法中使用类型参数,从而增强了代码的类型安全性和重用性。在Java中,泛型的主要目标是提高效率,避免运行时的类型转换,并且在编译时期就能发现...

    Java编程基础教程:枚举与泛型的深入讲解

    适用人群:适用于具有一定Java编程基础的学习者和开发者,特别推荐给希望深入了解Java核心技术的专业人士。 使用场景及目标:本文旨在提升读者对于Java中枚举和泛型的理解与应用能力,包括掌握如何高效地定义和使用...

    Day17 Java 集合和泛型.pdf

    Java集合框架是Java编程语言中用于存储和...本知识点通过介绍Java中Map接口及其常见实现类,详细阐述了Map的核心概念、操作方法和不同实现类的特性和应用场景,对于Java集合框架的学习者来说,是不可或缺的基础知识。

    Java泛型简明教程借鉴.pdf

    本教程将介绍Java泛型的基础知识,包括泛型类和接口、类型参数、泛型方法、通配符类型、类型擦除以及泛型与数组的关系等。 ### 泛型类和接口 在Java中,类或接口可以通过声明类型参数来创建泛型类或接口。类型参数...

    Java Web程序运用中泛型DAO的作用.pdf

    随后,文章指出泛型DAO模式的开发基础是Java泛型类的提出,并描述了传统Java程序开发框架结构及其存在的问题,如安全性无法保证等。 文章接着介绍了DAO模式,解释了DAO是程序和对象之间交流的第一窗口,它能够实现...

    java泛型深入[参照].pdf

    这也解释了为什么在Java中不能基于泛型类型进行方法重载,因为经过类型擦除后,不同的泛型类型参数实际上指向了相同的基础类型。 此外,需要注意的是,尽管泛型可以提供类型安全性,但它们并不影响继承关系。例如,...

    java语法大全,java语法,java编程基础,java入门

    最后,学习Java还需要了解Java的内存管理,特别是垃圾收集机制,以及如何优化代码性能。理解如何正确使用对象,避免内存泄漏,以及何时使用适当的集合类型,都是提升程序效率的关键。 总之,这份“java语法大全”...

    JAVA泛型详解

    了解这两种机制的不同之处对于充分理解Java泛型的能力边界至关重要。 #### 泛型在容器类中的应用 容器类是泛型最典型的应用场景之一。容器用于存储和管理对象集合,如List、Set和Map等。在泛型出现之前,容器类...

    后端研究-Apla-Java算法程序生成系统中新型泛型机制的实现.pdf

    本研究选择了Java 8.0作为程序转换的目标语言,在前人研究的基础上扩展了泛型编程,对Apla-Java自动程序生成系统中新的Java 8.0支持的泛型编程进行了研究和实现。 Apla源语言具有高度抽象和表达能力,并包含了对...

    泛型dao

    在Java编程语言中,"泛型DAO"(Generic DAO)是一种设计模式,它允许开发者创建可重用的数据访问对象(DAOs),...同时,了解如何阅读和解析XML配置文件也是Java开发者必备的技能之一,特别是在处理框架集成和配置时。

    经典泛型dao层代码,非常好用简易

    在现代软件开发中,特别是基于Java的企业级应用开发中,DAO(Data Access Object)层的设计扮演着至关重要的角色。它作为业务逻辑层与数据持久层之间的桥梁,承担着数据存取的核心职责。本文将深入探讨一种在SSH...

    黑马程序员----泛型与反射的小运用

    在Java编程语言中,泛型和反射是两个非常重要的特性,它们在软件开发中有着广泛的应用。本篇文章将深入探讨这两个概念以及它们在实际开发中的小运用。 首先,我们来看泛型(Generics)。泛型是在Java SE 5.0引入的...

    泛型知识总结

    泛型的应用广泛,特别是在集合框架中。通过泛型,我们可以在创建集合时指定元素类型,从而确保添加到集合中的元素必须符合指定类型。这增强了代码的可读性和安全性,减少了不必要的类型转换。例如,`ArrayList...

    传智播客Java教程 Java基础答疑公开课(一)

    在这个系列中,讲师特别强调了泛型的深入讲解,这是Java开发中的一个核心概念。 泛型是Java SE 5.0引入的一项重要特性,它允许在定义类、接口和方法时使用类型参数,从而增强了代码的类型安全性和重用性。通过泛型...

    推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 09.泛型(共15页).ppt

    Java 泛型是Java编程语言中的一个重要特性,它在JDK 1.5版本中引入,目的是为了...通过学习以上知识点,开发者可以更高效、安全地使用Java编程,特别是在处理集合时,能够避免运行时错误,提高代码的可维护性和可读性。

Global site tag (gtag.js) - Google Analytics