`
马苏大马哈鱼
  • 浏览: 7523 次
  • 性别: Icon_minigender_1
  • 来自: 天津
文章分类
社区版块
存档分类
最新评论

泛型类学习心得

阅读更多
泛型类学习心得


如果有一个类 Holder 用于包装一个变量,这个变量的类型可能是任意的,怎么编写 Holder 呢?在没有泛型之前可以这样:





在 Holder1 中,有一个用 Object 引用的变量。因为任何类型都可以向上转型为 Object,所以这个 Holder 可以接受任何类型。在取出的时候 Holder 只知道它保存的是一个 Object 对象,所以要强制转换为对应的类型。在 main 方法中, holder1 先是保存了一个字符串,也就是 String 对象,接着又变为保存一个 Integer 对象(参数 1 会自动装箱)。从 Holder 中取出变量时强制转换已经比较麻烦,这里还要记住不同的类型,要是转错了就会出现运行时异常。
下面看看 Holder 的泛型版本:





在 Holder2 中, 变量 a 是一个参数化类型 T,T 只是一个标识,用其它字母也是可以的。创建 Holder2 对象的时候,在尖括号中传入了参数 T 的类型,那么在这个对象中,所有出现 T 的地方相当于都用 String 替换了。现在的 get 的取出来的不是 Object,而是 String 对象,因此不需要类型转换。另外,当调用 set 时,只能传入 String 类型,否则编译无法通过。这就保证了 holder2 中的类型安全,避免由于不小心传入错误的类型。
通过上面的例子可以看出泛使得代码更简便、安全。引入泛型之后,Java 库的一些类,比如常用的容器类也被改写为支持泛型,我们使用的时候都会传入参数类型,如:ArrayList<Integer> list = ArrayList<>();。

泛型方法

泛型不仅可以针对类,还可以单独使某个方法是泛型的,举个例子:





GenericMethod 类本身不是泛型的,创建它的对象的时候不需要传入泛型参数,但是它的方法 f 是泛型方法。在返回类型之前是它的参数标识 <K,V>,注意这里有两个泛型参数,所以泛型参数可以有多个。

调用泛型方法时可以不显式传入泛型参数,上面的调用就没有。这是因为编译器会使用参数类型推断,根据传入的实参的类型 (这里是 integer 和 String) 推断出 K 和 V 的类型。


  • 大小: 68 KB
  • 大小: 84.7 KB
  • 大小: 99.3 KB
0
1
分享到:
评论

相关推荐

    C# 学习心得(最新)

    7. **泛型接口与委托**:接口定义了类必须遵循的规范,委托则可以视为一种类型安全的函数指针,两者在设计模式和事件处理中起到关键作用。 8. **Windows Forms与WPF**:C#常用于开发桌面应用,Windows Forms和WPF...

    c#学习心得,请看一看

    从给定的文件信息来看,标题和描述都指向了C#的学习心得,这是一门流行的编程语言,广泛应用于Windows应用程序开发、游戏开发(尤其是Unity引擎)、Web应用等场景。下面,我们将深入探讨C#的学习要点,包括其特性、...

    java学习心得

    - **泛型类**:支持类型参数,使得类的实现能够适应不同类型的数据。 - **类库**:预定义的类集合,提供广泛的代码复用可能性。 ### 面向对象语言 面向对象编程的概念已被多种编程语言采纳,包括但不限于: - **...

    学习心得--C++学习经典

    6. **类(Class)、模板(Template)、STL与泛型编程**:这些概念是C++中的核心要素,理解和运用它们能够帮助开发者构建更加灵活、可重用的代码库。 7. **学习目标与动机**:明确学习C++的目的(例如,为游戏开发、...

    C# 学习心得.rar

    这份名为"C#学习心得.rar"的压缩包,显然是一个学习者分享自己的学习历程和经验的集合。让我们深入探讨一下C#的核心知识点,以及在学习过程中可能遇到的挑战和解决方案。 C#的基础知识包括语法结构、变量、数据类型...

    Java学习心得,希望对大家有帮助!

    ### Java 学习心得 #### 1. 基本概念理解 - **面向对象编程(OOP)**: Java 是一门完全支持面向对象特性的语言,包括封装、继承和多态。 - **类与对象**: 类是对象的模板,而对象则是类的实例。理解如何创建类、...

    c++学习心得2.zip

    "C++学习心得2.zip"这个压缩包可能包含了作者在深入学习C++时积累的经验和笔记,旨在帮助其他自学者更好地理解和掌握这门强大的编程语言。从"interview-master"这个文件名来看,我们可以推测这是一份关于C++面试题目...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...

    c#集合的学习读书笔记 学习心得

    本文将深入探讨C#集合的学习心得,并基于给出的部分内容进行详细阐述。 首先,数组作为基本的数据结构,有其固有的限制。数组大小在创建时即被固定,若需调整大小,必须借助`System.Array.Resize`方法,但这种方法...

    c++学习心得

    1. **将C++视为一门独立的语言**:尽管C++继承了C的部分特性,但其强大的面向对象和泛型编程能力使其成为一门独立且复杂的语言。学习C++时,应将其当作全新的语言来学习,而非C的简单扩展。 2. **选择合适的学习...

    一个老鸟的java学习心得.docx

    【Java学习心得】 Java是一种广泛使用的面向对象的编程语言,对于初学者来说,掌握Java的基础和进阶知识至关重要。以下是我作为一个经验丰富的开发者在Java学习过程中的几点心得体会: 1. **基础牢固**:学习Java...

    java 经典自学程序及学习笔记心得

    总的来说,这个压缩包提供了一个全面的Java学习资源,不仅有实践性的代码示例,还有理论与实践经验相结合的学习心得。无论是初学者还是有一定基础的开发者,都能从中受益匪浅,进一步提升自己的Java技术水平。

    C++自己学习的笔记和心得

    同时,要善于总结和归纳,将学习心得转化为自己的知识体系,这对于深入理解和掌握C++大有裨益。注意不断更新知识,适应C++语言的发展,保持学习的热情和毅力,是成为一名优秀的C++程序员的关键。

    java中的泛型通配符的使用

    这是小编自己学习的心得,想通过这个平台对大家共享,希望大家前来评价一下,我及时改正,通配符这个是在泛型中使用的一个可以帮助大家更加方便简洁的去利用代码,它是其他泛型的一个总父类!

    Java学习的详细心得笔记

    Java学习的详细心得笔记是一份宝贵的资源,特别适合那些刚刚踏入Java编程领域的初学者。这份笔记涵盖了许多关键知识点,旨在帮助读者系统地理解和掌握Java语言的基础及进阶内容。以下是一些主要的学习要点: 1. **...

    我对C#的认识及学习心得

    C#的设计目标是成为一个现代化的、类型安全的、面向对象的编程语言,同时也支持泛型、垃圾回收、异常处理等高级特性。 学习C#首先需要理解它的基础语法。C#语法与C++和Java有诸多相似之处,但也有其独特之处。例如...

    C++学习笔记、心得

    这份"C++学习笔记、心得"涵盖了从基础语法到面向对象编程的概念,是作者一个半月辛勤学习的结晶。在这里,我们将深入探讨其中可能包含的知识点,并提供一些理解和应用C++的关键指导。 1. **基础语法**:C++的基础...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...

    学习资料大全(本人开发软件的所有学习资料和心得笔记)(之一)

    学习C#涵盖了变量、数据类型、控制流、函数、类与对象、继承、多态等基础概念,同时深入理解泛型、LINQ(Language Integrated Query)、异步编程、async/await关键字等高级特性,对于提升编程效率和代码质量至关重要...

    JAVA学习心得.pdf

    这两个方法都支持泛型,可以对各种类型的元素进行排序。 3. **字符串操作**:String类提供了toLowerCase()和toUpperCase()方法,用于将字符串转换为小写或大写。indexOf(String str)方法则用于查找字符串中指定子串...

Global site tag (gtag.js) - Google Analytics