`
xusulong
  • 浏览: 80972 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Effective Java 2 读书笔记 第5章 泛型

阅读更多

该章23-29条主要讲述使用泛型对编程的安全性所带来的好处以及可以使API得到更广泛的应用。

23条:不要在新代码中使用原生态类型

使用原生态类型如list,你不能确定该对象里面的元素到底是什么type,会发生ClassCastException的错误,而且编译时发现不了,运行时才可以。而有了泛型,参数化可以使得编译器明确知道list中的类型,在表述和安全方面都有优势。

泛型有子类型化的规则,List<String>是原生态类型List的一个子类型,但是不是参数化类型List<Object>的子类型。

不能将任何元素(除了null之外)放入Collection<?> c,即c.add(a)是不对的,c.add(null)则成立

在不确定或者不在乎集合中元素类型的情况下,使用无限制的通配符,即Set<?>

Set<Object>是个参数化类型,可以包含任何对象类型

List<Object> strings = new ArrayList<Object>();
		strings.add(1);
		strings.add("d");

 Set<?>是一个通配符,可以支持任何一个集合,表示只能包含某种未知对象类型的一个集合

List<Object> objects = new ArrayList<Object>();
		objects.add(1);
		objects.add("d");
		List<?> s = objects;
		List<String> stings = new ArrayList<String>();
		s = stings;

 Set则是个原生态类型,脱离了泛型系统,是不安全的,只在Java 1.5之前使用

两个例外:

1.在类型文字中必须使用原生态类型,不可以使用参数化类型,List.class, String[].class和int.class都合法,但是List<String>.class,List<?>.class不合法

2.instanceof

24条: 消除非受检警告

  1. 如果无法消除警告,同时可以证明引起警告的代码是类型安全的,(只有在这种情况下才)可以使用一个@SuppressWarnings("unchecked")注解来禁止这条警告
  2. 应该在尽可能小的范围中使用SuppressWarnings注解,不要再类上使用
  3. 没到使用@。。。的时候,都有加注释说明为什么这么做是安全的

25条:列表优先于数组

26条:优先考虑泛型

使用泛型比使用需要在客户端代码中进行转换的类型来的安全。

27条:优先考虑泛型方法

静态工厂方法尤其适合泛型化,泛型方法的好处类似于泛型,可以确保方法不经过转换使用。

28条:利用有限制通配符来提升API的灵活性

有限制的通配符

PECS原则,表示,producer-extends(List<? extends T>优先List<T>),consumer-super(List<? super T>优先List<T>)

不要用通配符作为返回类型

29条:优先考虑类型安全的异构容器

用类型作为Map的键

 

下一条 Effective Java 2 读书笔记 第6章 枚举和注解

0
0
分享到:
评论

相关推荐

    Java编程思想第十五章泛型(4).pptx

    Java编程思想第十五章泛型(4).pptx

    effective java 读书笔记

    《Effective Java》是Java开发领域的经典著作,作者...以上仅是《Effective Java》的部分内容,书中还有更多关于枚举、泛型、集合、多线程等方面的重要指导,都是Java开发者提升代码质量、遵循良好编程习惯的宝贵资源。

    java 带两个类型参数的泛型

    在Java编程语言中,泛型是一种强大的特性,它允许我们在类、接口和方法中使用类型参数,从而提高代码的灵活性和可复用性。当我们谈论“java带两个类型参数的泛型”时,这意味着我们正在处理一个泛型类或泛型方法,...

    Java程序设计:第五章 泛型、枚举与for语句的简化写法.ppt

    Java程序设计第五章 泛型、枚举与for语句的简化写法 Java 程序设计中,泛型(Genericity)是一种强大且灵活的编程技术,它可以减少数据的类型转换,并避免程序类型转换错误,并提高程序代码的复用性和运行效率。...

    Java语言程序设计教程课件第五章泛型和枚举

    2. Java泛型利用编译器擦除技术实现,这意味着泛型的源码在编译后会转化为非泛型版本的源码。 3. 泛型的类型擦除指的是在编译器前端处理阶段,去除所有的泛型类型信息,包括泛型类内的类型信息。 4. 泛型类被其所有...

    《Effective Java》读书分享.pptx

    "Effective Java 读书分享" 《Effective Java》读书分享.pptx 是一本 Java 编程语言指南,旨在帮助开发者编写高质量、可维护的 Java 代码。该书包含 90 个条目,每个条目讨论一条规则,涵盖了 Java 编程语言的...

    Effective-Java读书笔记

    《Effective Java》是Java...以上仅是《Effective Java》一书中部分核心知识点的概述,实际的读书笔记中会更详细地解释这些概念,并给出具体的示例代码。通过深入学习和实践,开发者可以极大地提升其Java编程的水平。

    Java基础笔记之集合框架和泛型

    详细的介绍了集合框架的用法,及其语法规则,剖析了使用的使用注意事项,帮助更牢靠的掌握集合框架的知识及泛型内容。谢谢

    JAVA泛型加减乘除

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

    关于java基础的泛型的练习

    Java泛型是Java SE 5.0引入的一个重要特性,它极大地增强了代码的类型安全性和可读性。泛型在编程中的应用广泛,特别是在集合框架中,使得我们可以在编译时就检查类型,避免了不必要的类型转换,并且提高了代码的...

    Java如何获取泛型类型

    我眼中的Java-Type体系(2) 秒懂Java类型(Type)系统 Java 运行时如何获取泛型参数的类型 Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现的接口获取泛型参数 定义一个泛型...

    Java 实现泛型List

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

    读书笔记:java基础 对象三大特性、泛型、异常、网络编程、io流等.zip

    读书笔记:java基础 对象三大特性、泛型、异常、网络编程、io流等

    Java集合框架及泛型

    泛型则是Java在J2SE 5.0版本引入的一个特性,极大地提高了代码的类型安全性和可读性。下面我们将深入探讨这两个主题。 首先,集合框架包括接口(如List、Set和Queue)和实现这些接口的具体类(如ArrayList、...

    JAVA第八章 泛型.pptx

    泛型是Java编程语言中的一个重要特性,自JDK 5版本起被引入,旨在提高代码的类型安全性,减少类型转换的麻烦,并增强代码的可读性和重用性。泛型的本质是参数化类型,允许我们在定义类、接口或方法时使用类型参数,...

    Java泛型不是真正的泛型

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

    Java泛型应用实例

    Java泛型是Java编程语言中的一个强大特性,它允许我们在定义类、接口和方法时指定类型参数,从而实现代码的重用和类型安全。在Java泛型应用实例中,我们可以看到泛型如何帮助我们提高代码的灵活性和效率,减少运行时...

Global site tag (gtag.js) - Google Analytics