java泛型(Generices Type)
--->概念:泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。
--->优点:(1)在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常【ClassCastException】,这是一个安全隐患。
Map m = new HashMap(); m.put("key", "blarg"); String s = (String) m.get("key");//需要进行显示的强制类型转换
泛型字母
T type表示类型
K V 分别代表键值对中的key,value
E 代表Element
?不确定类型
K V 分别代表键值对中的key,value
E 代表Element
?不确定类型
【泛型类】
泛型只能使用引用类型。
1 /** 2 * 3 ----->声明类时使用泛型 4 ----->泛型不只能使用引用类型 5 ----->泛型声明时不能使用在静态属性,静态方法上 6 */ 7 public class Student<T1, T2> { 8 private T1 javase; 9 private T2 oracle; 10 //private static T2 add;会报错的 11 public Student() { 12 super(); 13 } 14 public Student(T1 javase, T2 oracle) { 15 super(); 16 this.javase = javase; 17 this.oracle = oracle; 18 } 19 20 public T1 getJavase() { 21 return javase; 22 } 23 24 public void setJavase(T1 javase) { 25 this.javase = javase; 26 } 27 28 public T2 getOracle() { 29 return oracle; 30 } 31 32 public void setOracle(T2 oracle) { 33 this.oracle = oracle; 34 } 35 36 }
【泛型接口】
1 /** 2 *(接口中只能定义静态全局变量,抽象方法) 3 接口中泛型字母只能使用在方法中,不能使用在全局常量中 4 5 */ 6 public interface Person<T,T2> { 7 public abstract void Address(T a); 8 public abstract T2 queryAll(); 9 }
【泛型方法】
1 /** 2 * 3 *格式----->修饰符 泛型字母 返回值类型 方法名(泛型字母 形参) 4 *(只能访问对象信息,不能修改对象信息) 5 ---><T>用在返回值类型 6 --->也可以用在形参列表上 7 */ 8 public <T> void queryList(T a){ 9 10 System.out.println("Student.queryList()"+a); 11 }