泛型
1. 概念语法
1. Java泛型是JDK1.5中引入的一个新特性,其本质是参数化类型,把类型作为参数传递。
2. 常见形式有泛型类、泛型接口、泛型方法。
3. 语法:<T,...> T称为占位符,表示一种引用类型。
优点:
1. 提高代码的重用性
2. 防止类型转换异常,提高代码安全性。
2. 泛型类
- 泛型之泛型类
- 语法:类名 < T >
- T 是类型占位符,表示一种引用类型,可以写多个,可以使用逗号隔开
- 泛型可以声明变量 做方法的形参 可以做方法的返回值 但是不可以实例化!!
使用1:
public class Demo01<T> {
// 使用泛型 T
// 1. 创建变量
T t;
// 2. 创建方法(作为方法的参数)
public void show(T t){
System.out.println(t);
}
// 3. 使用泛型做方法返回值
public T getT(){
return t;
}
}
泛型接口:
package com.fanXinDemo;
/**
* 泛型接口
* 语法:接口名<T>
* 注意:不能泛型创建静态常量
* */
public interface MyInterface<T> {
String name = "张三";
T server(T t);
}
泛型接口实现类1:直接声明泛型类型
package com.fanXinDemo;
public class MyInterfaceImpl implements MyInterface<String>{
@Override
public String server(String s) {
System.out.println(s);
return s;
}
}
泛型接口实现类2:类也使用泛型
package com.fanXinDemo;
public class MyInterfaceImpl2<T> implements MyInterface<T> {
@Override
public T server(T t) {
System.out.println(t);
return t;
}
}
测试类:
package com.fanXinDemo;
public class TestDemo01 {
public static void main(String[] args) {
// 使用泛型类创建对象 实例化中的<> 在 JDK1.7之后可写可不写
Demo01<String> myGeneric =new Demo01<String>();
// 注意:1. 泛型只能使用引用类型
// 2. 不同泛型类型对象之间不能相互赋值
// 3.
myGeneric.t = "Heelo";
myGeneric.show("大家好");
String s1 = myGeneric.getT();
System.out.println(s1);
Demo01<Integer> myGeneric2 = new Demo01<>();
myGeneric2.t = 100;
myGeneric2.show(200);
Integer integer = myGeneric2.getT();
System.out.println(integer);
MyInterfaceImpl mif1 = new MyInterfaceImpl();
mif1.server("11231231");
MyInterfaceImpl2<Integer> mif2 = new MyInterfaceImpl2<>();
mif2.server(11111);
}
}
3. 泛型方法
package com.fanXinDemo;
/**
* 泛型方法
* 语法:<T> 返回值类型
* */
public class MyGenericMethods {
// 泛型方法
public static <T> T show(T t){
System.out.println("泛型方法"+t);
return t;
}
}
4. 泛型集合
4.1 概念
参数化类型、类型安全的集合、强制集合元素的类型必须一致。
4.2 特点
编译时即可检查,而非运行时抛出异常。
访问时,不必类型转换(拆箱)。
不同泛型之间引用不能相互赋值,泛型不存在多态。