`

java编程思想阅读笔记(八)泛型

 
阅读更多
继续我的缓慢阅读,感觉细的东西真的是很多很多,往往在需要的时候才显得那么重要,所以让这种阅读算是有个印象,需要的时候能想起来,或者说脑子里有了那么个观念,熟能生巧是弥补的方式,可......好了,开始了:这次是泛型,优势有,局限也有(擦除),但是我还没有很深的感受到擦除的局限。
泛型:适用于许多的类型,正如我们看到的容器类型,可以保存多种类型的对象,实现了“参数化类型”的概念;自己通俗的理解就是有那么一些代码,都是通用的,但是操作的对象呢,对类型没有特别的要求,那么我在用这些代码的时候再告诉它类型(参数化类型,告诉的类型就像传进去的参数,应该是这么个意思吧O(∩_∩)O~),这种方式可以用在类,也可以用在方法上。在类上使用,我们见到的比较多,示例都是的,我们在声明一个这样的类的时候就是在类名后使用<T>这种形式,当然可以不止一个参数,而且用容器的时候经常一个ArryList<Person> 声明一个可以保存Person类型对象的List;后面的示例会有。那么在接口和方法中使用呢,下面细看:
(1)泛型应用于接口
书中采用了一个Generator接口的示例,声明如下:
public interface Generator<T> {T next();}
这样确保其中的next方法返回值是参数的类型,使得next()的代码泛化。
(2)泛型方法
先看下语法:

public<T> void f(T x){},将泛型参数列表置于返回值之前,看个示例:

输出:

后面再用上擦除的概念,看看局限在哪里。

(3)泛型方法与可变参数的使用:
public static <T> List<T> makeList(T...args){
List<T> result = new ArrayList<T>();
for(T item : args)
result.add(item);
return result;
}
(4)擦除和边界
由于早期的Java版本中是不支持泛型的,因此,在后来具有泛型功能,就要兼容前面的版本,所以有了其局限性;在Java泛型代码内部,是无法获得有关类型参数类型的信息的,因此不能将泛型类型显示地使用其运行时类型操作,如转型(本来就没什么作用),instanceof操作和new操作等,从前面的示例也可以看到。那么擦除又是个什么概念呢?按我的说法就是把类型参数替换为第一个非泛型类型,书上说的就是擦除到它的第一个边界(可能会有多个边界)。那边界的理解,书中说是对象进入和离开方法的地点,我是没有通俗的理解。那么在Java泛型具有擦除的性质下,有什么办法弥补呢,可以用类型标签(就是类型.class)把实际的类型信息告知,或者使用extends关键字,配合通配符“?”来弥补一些(这就是我们看到的<? extends >)。
(5)潜在类型机制
在书中还提到了这个概念,虽然说Java是不支持的,但是还是很有意义(c++支持),是只要实现某个方法子集,而不是某个特定类或接口,从而可以产生更加泛化的代码,因此可以横跨类继承结构,调用不属于某个公共接口的方法。
看来很多c++拥有的特性都被Java删除了,难怪说Java是简化了c++而演化了的,当时以为就是个指针、模板之类的变化了。
分享到:
评论

相关推荐

    java编程思想读书笔记

    ### Java编程思想读书笔记 #### 一、Java与C++的区别及内存管理 在学习Java的过程中,我们常常会拿它与C++进行比较。这两门语言虽然有着相似之处,但也有许多不同点。 1. **内存管理:** - C++提供了更为底层的...

    Java编程思想-笔记.docx

    Java编程思想笔记 本笔记涵盖了Java编程思想的多个方面,包括访问权限控制、封装、继承、多态、接口、内部类、持有对象等。 访问权限控制 访问权限控制是为了把变动的事物与保持不变的事物区分开来。Java中有四种...

    Java编程思想学习笔记

    在讨论Java编程思想学习笔记时,首先需要了解的是Java语言的平台无关性,而这一特性正是通过Java虚拟机(JVM)得以实现的。JVM作为Java程序设计的关键组成部分,对于Java开发人员来说是必须掌握的基础知识。在该学习...

    java编程思想读书笔记.rar

    《Java编程思想》是 Bruce Eckel 的经典之作,这本书深入浅出地介绍了Java语言...通过阅读《Java编程思想》,读者可以全面理解Java语言,并具备实际开发能力。配合书中的例子和练习,能更好地巩固知识,提升编程技能。

    Java编程思想重点笔记(Java开发必看).pdf

    以上只是Java编程思想笔记中的冰山一角,深入学习还包括网络编程、数据库连接、JVM内存模型、垃圾回收机制、并发编程高级话题、Spring框架等内容。这些知识点构成了Java开发者必备的基础知识体系,通过不断学习和...

    JAVA编程思想笔记

    ### JAVA编程思想笔记 #### 一、编程语言与Java特性 1. **编程语言类别**: - **机器语言**:直接与硬件交互的语言,由0和1组成。 - **汇编语言**:接近机器语言,使用助记符表示指令。 - **高级语言**:更接近...

    java核心思想读书笔记

    Java是一种广泛使用的编程语言,它的核心思想在于克服程序开发与维护的复杂性,同时强调高效、健壮性和创新。从标题“java核心思想读书笔记”和描述可以看出,这份资料是作者结合《Java核心思想》一书和其他网络资源...

    Java编程思想笔记(全)

    ### Java编程思想笔记知识点概述 #### 第 1 章 对象导论 在这一章节中,主要介绍了Java中的基本概念——对象。对象是面向对象编程的核心,它封装了数据和行为。本章首先解释了对象的概念,接着讨论了如何创建对象...

    java学习资料/笔记整理(一)

    本文将深入探讨“java学习资料/笔记整理(一)”中涉及的重要知识点,包括Java编程思想、类型协变、查询手册以及数据结构与算法。 首先,Java编程思想是理解Java核心概念的关键。这通常涉及到面向对象编程(OOP)...

    非常好的java笔记适合初学者

    总的来说,这份"非常好的java笔记"是初学者学习Java编程的理想教材,它将引导读者逐步掌握编程基础,理解面向对象编程思想,以及熟悉Java特性和库的使用。通过系统的阅读和实践,初学者能够建立起坚实的Java编程基础...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记是为Java初学者量身定制的一份宝贵资料,它涵盖了Java编程的基础概念、语法以及...通过详细阅读和反复实践,初学者可以逐步提高编程技能,理解Java编程的核心思想,从而在软件开发的世界里游刃有余。

    大佬的java笔记

    由于提供的文件内容中,...如果要学习Java,最好的方式是从学习Java的基础语法和面向对象编程思想入手,逐步深入到类库使用和Java高级特性,同时实践相关的设计模式和架构设计,这样可以更全面地掌握Java编程的精髓。

    Java JDK 8学习笔记 带完整书签(不是页码书签哦)

    对于那些想要提升Java编程技能的开发者来说,这本书是不可多得的参考资料。 总的来说,《Java JDK 8学习笔记》是一本全面覆盖Java 8新特性的指南,它通过深入浅出的讲解和丰富的实例,帮助读者掌握Java 8的核心概念...

    java笔试题算法-Thinking-in-Java:《ThinkingInjava》-Note《Java编程思想》笔记作者:[美]Bruce

    《Java编程思想》笔记 看了两个月,书中有穿插着一些设计模式应用到实际的例子中。这本书不会一味地讲语法,更多的是会讲一些Java的设计思想,比如他不会一开始就教你怎么用泛型,而是先介绍为什么会出现泛型,没有...

    B站java狂神说笔记

    这份笔记的PDF版本详细讲解了Java的基础概念、进阶特性和实战应用,旨在帮助读者全面理解和掌握Java编程。 一、Java基础 Java基础部分包括了Java环境的搭建、基本语法、数据类型、控制结构(如if语句、switch语句、...

    JAVA经典教材笔记

    - Java作为一种广泛使用的编程语言,其学习路径包括掌握基本语法、理解面向对象编程思想、熟悉标准库使用等。 - **JAVA发展概述** - Java的发展历程:从1995年由Sun Microsystems公司发布以来,Java经历了多次重大...

    java实战经典学习笔记

    通过这些知识点的学习,读者能够掌握Java的基础语法和面向对象编程的核心思想,并能够运用到实际的软件开发中去。此外,通过对各种高级特性和常用类库的深入理解,可以提高开发效率和代码质量。

    全套达内学习笔记(java)

    【CoreJava.zip】:核心Java是Java编程的基础,可能包括了Java SE(标准版)中的核心概念和技术,如IO流、NIO(非阻塞I/O)、多线程、并发编程、集合框架的深入探讨、泛型、枚举、Lambda表达式、Stream API等。...

    Java学习的详细心得笔记

    Java学习的详细心得笔记是一份宝贵的资源,特别适合那些刚刚踏...在阅读"Java笔记"的过程中,结合实际的编程练习,可以逐步提升Java编程技能。这份笔记将是一个很好的辅助工具,帮助初学者从基础到深入地探索Java世界。

Global site tag (gtag.js) - Google Analytics