使用泛型时,如果两边都用到泛型,两边必须要一样。例如:
ArrayList<String> list = new ArrayList<String>();
不能
ArrayList<Object> list = new ArrayList<String>();
ArrayList<String> list = new ArrayList<Object>();
泛型类型必须要用引用类型,不能是基本数据类型。
以下这些是可以的(sun这样设计是为了兼容):
ArrayList<String> list = new ArrayList();
ArrayList list = new ArrayList<String> ();
Java泛型是提供给javac编译器使用的,他用于限定集合的输入类型,让编译器在编译前能检查集合中的非法数据。在编译成class文件后,泛型将会被擦除,以做到不影响程序运行效率。总之,泛型的引入是为了将运行时的错误提前到编译前提醒。
自定义带泛型方法:
泛型要先声明,再使用
package com.summer.day1;
/**
* <T,K,M>在类上声明泛型
* 他对类中的静态方法不起作用,类中的静态方法需要在方法上声明类型
* @author Mark Summer
*
* @param <T>
* @param <K>
* @param <M>
*/
public class Main<T,K,M> {
/**
* <T>这是泛型在方法上的声明
* @param t
*/
public <T> void method1(T t){
}
//多个泛型的声明
public <T,K> void method2(T t,K k){
}
//类上已经声明了泛型
public void method3(T t){
}
}
如果一个类中多出用到同一泛型,这时可以吧泛型定义到类上。
类中的静态方法无法使用类定义的泛型,而应在静态方法上单独定义泛型。
package com.summer.day1;
public class Generic<T> {
private T field;
public T getField(){
return field;
}
public void setField(T t){
}
public static <T> void util(T t){
}
}