Effective java -- 4 泛型
第二十三条:请不要在代码中使用原生态类型
就是像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 泛型的更多相关文章
- 和我一起学Effective Java之泛型
泛型 不要在新代码中使用原始类型 泛型(generic):声明中具有一个或多个类型参数 原始类型(raw type):不带任何实际类型参数的泛型名称 格式: 类或接口的名称 < 对应于泛型形式类 ...
- Effective Java 第三版——29. 优先考虑泛型
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Effective Java 第三版——32.合理地结合泛型和可变参数
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Effective java笔记(二),所有对象的通用方法
Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ...
- 《Effective java》-----读书笔记
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...
- effective java 读后感
think in java , effective java 这两本书一直都在java的生态圈中经久不衰.本来想着先翻过 think in java 这本大山,但是读到一半就放弃了.过长的篇幅,让 ...
- Effective java读书笔记
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己 计在16年要看12本书,主要涉及java基础.Spring研究.java并发.J ...
- [Effective Java]第八章 通用程序设计
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Java 中泛型的全面解析(转)
Java泛型(generics) 是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter).声明的类型参数在使用时用具体的类型来替换.泛型最主要的应用是在J ...
随机推荐
- bootstrap validator html attributes 选项
常用的html属性:data-fv-message="The username is not valid"data-fv-notempty="true"data ...
- OC和JS的交互---JavaScriptCore
JavaScriptCore的简单介绍 JavaScriptCore是iOS7提供的原生框架,可以让Objective-C和JavaScript提供简单直接的交互. JavaScriptCore的使用 ...
- drupal7 开发block
在自己开发的模块的module文件中,实现两个钩子:hook_block_info()和hook_block_view() function journal_block_info() { $block ...
- Apriori算法-数组-C语言
原文地址:http://blog.csdn.net/liema2000/article/details/6118423 #include<stdio.h>typedef struct { ...
- VMware+Windbg双机调试
虚拟机使用XP系统:
- C++primer 9.49
题目:如果一个字母延伸到中线之上,如d或f,则称其有上出头部分(ascender).如果一个字母延伸到中线之下,如p或g,则称其有下出头部分(descender).编写程序,读入一个单词文件,输出最长 ...
- HDU1073:Online Judge
Problem Description Ignatius is building an Online Judge, now he has worked out all the problems exc ...
- flash跨域策略文件crossdomain.xml配置详解
来源:http://www.2cto.com/Article/201108/100008.html 0x01 简介 flash在跨域时唯一的限制策略就是crossdomain.xml文件,该文件限制了 ...
- codeforce div2 C 树状数组
http://codeforces.com/contest/362 题目大意:给你一个序列,用冒泡排序法让他变为非递减的序列最少需要几次.在冒泡交换之间,你有一个swap操作,该swap操作是交换任意 ...
- 根据View获取该控制器
//根据View获取控制器 - (UIViewController*)viewController { for (UIView* next = [self superview]; next; next ...