第二十三条:请不要在代码中使用原生态类型
就是像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));
}
}

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

最新文章

  1. 自己写一个 jQuery 插件
  2. Linux内核TCP/IP参数分析与调优
  3. 向tiny6410中移植中移植linux-4.5.1内核(最新)
  4. Oracle 数据库表同步方法浅议
  5. HTML表单的问题
  6. 怎么利用SQL语句查询数据库中具体某个字段的重复行
  7. 【原创】linux命令bc使用详解
  8. JS获取网页宽高方法集合
  9. MySQL 查询某时间段范围内的数据 补零
  10. (九)groupByKey,reduceByKey,sortByKey算子-Java&amp;Python版Spark
  11. [原]RobotFrameWork(四)变量运算与Evaluate
  12. JS的单例模式
  13. Jmeter_24个常用函数(分享帖)
  14. jmeter用Firefox录制https协议证书问题解决
  15. Eclipse编程中免除alt+斜杠,设置自动提示
  16. java之threadlocal的使用
  17. 导出表结构sql语句
  18. scrapy之downloader执行流程
  19. django之创建第6-2个项目-过滤器列表
  20. Node.js之操作Mongodb

热门文章

  1. 设计模式5 合成模式 COMPOSITE
  2. php获取当前域名
  3. 1.0 Python 学习网站
  4. log4j2配置MDC分线程写日志
  5. 《JavaScript高级程序设计》读书笔记 ---语句
  6. web.config中httpModules和Modules的区别
  7. 使用OpenCV查找二值图中最大连通区域
  8. linux中的 tar命令的 -C 参数,以及其它一些参数(转)
  9. elasticsearch简介
  10. LeetCode OJ 95. Unique Binary Search Trees II