Java 泛型学习一 泛型概念
Java 泛型学习二 泛型的限制
Java 泛型学习三 通配符
Java 泛型学习四 自动擦除
Java 泛型学习五 泛型擦除带来的不自然
Java 泛型学习六 泛型类型系统
泛型就是降类型也作为参数来进行指定,这样不再进行类型强制转换,从而降低了代码量,提高了程序的性能、灵活性、安全性和可读性。
泛型类或接口的声明
public class 类名<类型变量>{ 类体 }
- 对于泛型类的类型变量需要使用一对尖括号(<>)括起来,并放在类名的后面;
- 类型变量可以使用任何符合Java命名规则的标示符,但为了方便通常都采用单个的大写字母。例如,用E表示集合元素的类型,用K与V分别表示键值对中的键类型与值类型,而用T、U、S表示任意类型;
- 泛型类的类型变量同时可以有多个,类型变量之间使用逗号分割,如同方法参数一样;
- 类体中声明的方法可以使用这些类型变量来作为类型,从而使得在调用泛型类时动态指定;
- 类型变量不能使用8中基本类型,只能使用基本类型的引用类型;
Demo:
package net.oseye; public class FanXing { public static void main(String[] args) { TestTemp<String> testTemp1=new TestTemp<String>(); testTemp1.temp="oseye"; testTemp1.Say(); TestTemp<Integer> testTemp2=new TestTemp<Integer>(); testTemp2.temp=12; testTemp2.Say(); } } class TestTemp<T>{ T temp; public void Say(){ System.out.println(temp); } }
泛型接口与泛型类类似,不再赘述。
泛型方法的声明
public static <类型变量> 返回类型 方法名(参数列表){ 方法体 }
- 泛型方法可以在普通类中,也可以在泛型类中,但一般为静态方法,因为静态方法属于类,不能在创建对象时再通过类型参数指定类型;
- 泛型方法与泛型类不同的是类型参数声明是放在方法返回值类型声明之前,而不是像方形类那样放到声明的最后;
示例代码:
package net.oseye; public class FanXing { public static void main(String[] args) { String[] strArray={"kevin","oseye.net","beston"}; Integer[] numArray={1,2,3}; System.out.println(TestTemp.getLast(strArray)); System.out.println(TestTemp.getLast(numArray)); } } class TestTemp{ public static <T> T getLast(T[] array){ return array[array.length-1]; } }