第二十三条:请不要在代码中使用原生态类型
就是像Set这种待泛型的,就把泛型明确写出来。

第二十四条:消除非受检警告
就是Set<String> sets = new HashSet();这种,第二个泛型不加会有一个警告。

第二十五条:列表优先于数组
数组和泛型的区别:

  • 数组是协变的。就是如果Sub是Super的子类型,那么Sub[]就是Super[]的子类型。泛型则是不可变的。
  • 数组是可具体化的。一次数组会在运行时才知道并检查他们的元素类型约束。

第二十六条:优先考虑泛型
类上加上泛型。

第二十七条:优先考虑泛型方法
和上面差不多,写方法的时候最好能把泛型加上,方便其他人理解,也对类型做了限制跟安全。


interface UnaryFunction<T> {
T apply(T arg);
}
public class TwentySeventh {
private static UnaryFunction<Object> unary = new UnaryFunction<Object>() {
@Override
public Object apply(Object arg) {
return arg;
}
}; @SuppressWarnings("unchecked")
public static <T> UnaryFunction<T> identityFunction() {
return (UnaryFunction<T>) unary;
} public static void main(String[] args) {
String[] strings = {"f", "z", "k"};
UnaryFunction<String> sameString = identityFunction();
for (String string : strings)
System.out.println(sameString.apply(string)); Number[] numbers = {1, 2.0, 3L};
UnaryFunction<Number> sameNumber = identityFunction();
for (Number number : numbers)
System.out.println(sameNumber.apply(number));
}
}

第二十八条:利用有限制通配符来提升API的灵活性

public class TwentyEighth {
public static <E> Set<E> union(Set<? extends E> s1, Set<? extends E> s2) {
Set<E> set = new HashSet<E>(s1);
set.addAll(s2);
return set;
} public static void main(String[] args) {
Set<Integer> integers1 = new HashSet<Integer>(Arrays.asList(1, 2, 3));
Set<Integer> integers2 = new HashSet<Integer>(Arrays.asList(1, 2, 3));
Set<Double> doubles = new HashSet<Double>(Arrays.asList(1.0, 2.0, 3.0));
union(integers1, integers2);
System.out.println(union(integers1, doubles));
}
}

第二十九条:优先考虑类型安全的易购容器

Effective java -- 4 泛型的更多相关文章

  1. 和我一起学Effective Java之泛型

    泛型 不要在新代码中使用原始类型 泛型(generic):声明中具有一个或多个类型参数 原始类型(raw type):不带任何实际类型参数的泛型名称 格式: 类或接口的名称 < 对应于泛型形式类 ...

  2. Effective Java 第三版——29. 优先考虑泛型

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  3. Effective Java 第三版——32.合理地结合泛型和可变参数

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  4. Effective java笔记(二),所有对象的通用方法

    Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ...

  5. 《Effective java》-----读书笔记

    2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...

  6. effective java 读后感

    think in java  , effective java  这两本书一直都在java的生态圈中经久不衰.本来想着先翻过 think in java 这本大山,但是读到一半就放弃了.过长的篇幅,让 ...

  7. Effective java读书笔记

    2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己 计在16年要看12本书,主要涉及java基础.Spring研究.java并发.J ...

  8. [Effective Java]第八章 通用程序设计

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. Java 中泛型的全面解析(转)

    Java泛型(generics) 是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter).声明的类型参数在使用时用具体的类型来替换.泛型最主要的应用是在J ...

随机推荐

  1. UPX3.03+UpolyX.5 Shell v1.0 汉化绿色版

    软件名称:UPX3.03+UpolyX.5 Shell v1.0 汉化绿色版软件类别:汉化软件运行环境:Windows软件语言:简体中文授权方式:免费版软件大小:635 KB软件等级:整理时间:201 ...

  2. matlab显示图像的横纵坐标

    imshow(I);title('公路');axis on;  %如果不需要,on改为off

  3. 关于oracle数据库(2)

    数据备份.数据删除.数据还原 连接数据库,查看scott用户下面的所有表 数据备份(数据导出)要输入导出文件路径和文件名(文件扩展名可输入也可以不输入) 导出成功后,可以在上面输入的文件路径下面看到导 ...

  4. Tcp Socket非阻塞recv

    最近看了许多关于网络编程的资料,自己小记一下,以方便以后查找. 什么是阻塞socket,什么是非阻塞socket.对于这个问题,我们要先弄清什么是阻塞/非阻塞.阻塞与非阻塞是对一个文件描述符指定的文件 ...

  5. JPA 系列教程16-继承-联合子类-JOINED

    联合子类策略 这种情况下子类的字段被映射到各自的表中,这些字段包括父类中的字段,并执行一个join操作来实例化子类. 举例 如果实体类Teacher继承实体类Person,实体类Student也继承自 ...

  6. 关于C#文件复制(递归)

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  7. docker 基础命令二

    开启/停止/重启 查看当前正在运行容器docker ps 查看包括已经停止的所有容器docker ps -a 显示最新启动的一个容器docker ps -l 新建一个容器运行docker run 启动 ...

  8. centos6.5中gitlab的搭建

    使用gitlab官网给的源码进行安装,步骤如下: Install a GitLab CE Omnibus package on CentOS 6 (and RedHat/Oracle/Scientif ...

  9. 【Holograms 101D】一步步用Unity 开发 Hologram

    转载请注明出处: copperface:[Holograms 101D]一步步用Unity 开发 Hologram Holograms 101 该教程将带领你走完 Hologram 创建 的全过程.整 ...

  10. vb6学习心路

    1.不能加载 'MSCOMCTL.OCX'--继续加载工程吗解决办法:新建一个VB工程,然后按CTRL + T,选中 “Microsoft Windows Common Controls 6.0” 然 ...