背景知识
Java 泛型
泛型是什么
generics:为了参数化类型,可以把类型当作参数传递给一个类或者是方法。
如果不用泛型,我们会使用强转:
public class Cache<T> {
T value;
public Object getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
//泛型
Cache<String> cache1 = new Cache<String>();
cache1.setValue("123");
String value2 = cache1.getValue();
Cache<Integer> cache2 = new Cache<Integer>();
cache2.setValue(456);
int value3 = cache2.getValue();
java7,java8泛型的特性
//java7特性
Cache<String> cache1 = new Cache<String>();
//也可以写为
Cache<String> cache1 = new Cache<>();
//因为Java可根据上下文推断此处为String泛型
Java8中进一步推断
void processStringList(List<String> stringList) {
// process stringList
}
//在java8中可行,在java7中不可行(因为java8引入了目标类型帮助推断)
processStringList(Collections.emptyList());
//java7中的写法
processStringList(Collections.<String>emptyList());
泛型的特点
Cache<String> cache1 = new Cache<String>();
cache1.setValue("123");
// error 只能储存String
cache1.setValue(1234);
泛型除了可以将类型参数化外,而参数一旦确定好,如果类似不匹配,编译器就不通过。
上面代码显示,无法将一个 String 对象设置到 cache2 中,因为泛型让它只