泛型
概念:Java泛型时jdk1.5中引入的一个新特性,其本质时参数化类型,把类型作为参数传递
常见的形式有:泛型类、泛型接口、泛型方法
1.泛型类
package gather.Generic; /** * 泛型类 * 语法:类名<T> * T是类型占位符,表示一种引用类型,如果编写多个可逗号隔开<A,B,C> * @param <T> * @author 长空扯淡 */ public class MyGeneric<T> { //使用泛型T //创建变量 T t; //泛型作为方法的参数 public void show(T t){ //T t1 = new T(); 这是错误的, System.out.println(t); } //泛型作为方法的返回值 public T getT(){ return t; } }
//使用泛型类创建对象
MyGeneric<String> myGeneric = new MyGeneric<>();
2.泛型接口
(1)先创建一个泛型接口
/** * 泛型接口 * 语法:接口名<T> * 注意:不能泛型静态常量 * @author 长空扯淡 */ public interface MyInterface<T> { String name = "法外狂徒"; T server(T t); }
(2)接口的实现
有两种方法:第一种是直接声明泛型的类型
//这是一种方法,即直接声明泛型的类型 这里的<String> public class MyInterfaceImpl implements MyInterface<String> { @Override public String server(String s) { System.out.println(s); return s; } }
第二种是在实例化的时候给出泛型的类型
//这是第二种方法,不直接给出泛型的类型,而是在实例化的时候给出泛型的类型 public class MyInterfaceImpl2<T> implements MyInterface<T> {//这个地方暂且还是用<T>表示 前后都有 @Override public T server(T t) { System.out.println(t); return t; } }
实例化 给出<Integer>类型
MyInterfaceImpl2<Integer> impl2 = new MyInterfaceImpl2();
impl2.server(600);
3.泛型方法
package gather.Generic; /** * 泛型方法 * 语法:<T> 返回值类型 * @author 长空扯淡 */ public class MyGenericMethod { //泛型方法 public <T>void show(){ System.out.println("泛型方法"); } public <T>T play(T t){ System.out.println(t); return t; } }
在main方法中调用
//泛型方法 相当于方法的重载,
MyGenericMethod myGenericMethod = new MyGenericMethod();
myGenericMethod.show();
myGenericMethod.play("张三");//可以直接给String
myGenericMethod.play(200);//也可以是int类型
4.泛型集合
概念:参数化类型、类型安全的集合,强制集合元素的类型必须一致
特点:
- 编译时即可检查,而非运行时抛出异常。
- 访问时,不必转换类型(拆箱)。
- 不同泛型之间引用不能相互赋值,泛型不存在多态。
//创建集合 后面这里的String可写可不写 Set<String> set = new HashSet<String>();
浙公网安备 33010602011771号