1:声明好泛型类型之后,集合中只能存放特定类型元素
2:泛型类型必须是引用类型
3:使用泛型后取出元素不需要类型转换.
=====================泛型函数===============================
当函数中使用了一个不明确的数据类型,那么在函数上就可以进行泛型的定义。
public <泛型的声明> 返回值类型 函数名( 泛型 变量名 ){
}
ex:
public <T>T getData(T data) {
return data;
}=====================泛型类===============================
修饰符 class 类名<泛型>{
public TgetData(T data) {
return data;
}
//静态方法不可以使用类中的泛型,因为静态方法先于类加载
public static <E> E getData2(E data) {
return data;
}
}
=====================泛型接口===============================
interface Inter<T> {
void print(T t);
}
=====================通配符==================================
泛型针对于声明,而通配符针对实现
伪代码:
void print(collection<?> coll){ ...}
main(){
ArrayList<String> list = ...
print(list);
HashSet<Object> set=...
print(set)
explain:print传入 ArrayList<String>,HashSet<Object> 都不会报错,因为collection<?>是通配符,如果collection<Object>那么传入ArrayList<String>就会报错
}
? extends E: 接收E类型或者E的子类型。
? super E: 接收E类型或者E的父类型。