只能用于声明,不能用于定义
- 泛型是一个不存在的类,它不能实例化
- int i=10;// int i;声明 i=10;// 定义
- 语法格式: 类声明的时候类名的右边可以加上一对尖括号,尖括号中写一个泛型通配符
特性
在编译之后程序会采取去泛型化的措施,也就是说Java中的泛型,只在编译阶段有效。在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。
对此总结成一句话:泛型类型在逻辑上看以看成是多个不同的类型,实际上都是相同的基本类型。
泛型类的基本格式:
class 类名称 <泛型标识:可以随便写任意标识号,标识指定的泛型的类型>{
private 泛型标识 /*(成员变量类型)*/ var;
.....
}
}
例子:
//此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型
//在实例化泛型类时,必须指定T的具体类型
public class Generic<T>{
//key这个成员变量的类型为T,T的类型由外部指定
private T key;
public Generic(T key) { //泛型构造方法形参key的类型也为T,T的类型由外部指定
this.key = key;
}
public T getKey(){ //泛型方法getKey的返回值类型为T,T的类型由外部指定
return key;
}
}
Manage类
如果写有list.sdd(10);则会报错,其中用到泛型的地方都会被替换为你所指定的类型,意味着别的类型就会报错。
public class Manage {
public static void main(String[] args) {
// 使用MyList 创建对象时需要指定一个具体的类型
// 必须是一个类型
MyList<String> list = new MyList<String>();
list.add("A");
//list.add (10);
String s = list.get(0);
s.hashCode ();
//s.equals ();
// 泛型被指定为固定的类型之后,再使用这个对象的方法时
// 其中用到泛型的地方都会被替换为你所指定的类型
System.out.println(s);
System.out.println(s.hashCode());
}
}
MyList类
泛型类
public class MyList<E> {
Object[] valueList = {"a","b","c"};
int size;
/**
* 泛型用于参数
*
* @param e
*/
public void add(E e) {
valueList[size++] = e;
}
public E get(int index) {
// valueList[index] 取出来就是Object类型 主动转为<E>类
return (E) valueList[index];
}
}
初学者!