Java泛型是JDK1.5中引入的一个新特性,其本质是参数化类型,把类型作为参数传递
常见形式有泛型类,泛型接口,泛型方法
语法:
<T,…>T称为是占位符,表示一种引用类型
好处:
1)提高代码重用性
2)防止类型转换异常,提高代码安全性`
实例:
1)作为泛型类
//泛型类
//语法:类名<T,..>
//T表示类型占位符,表示一种引用类型,引用编写多个用逗号隔开
//泛型只能是引用类型
//不同的泛型对象之间不能相互赋值
public class MyGenerics<T> {
//使用泛型T创建变量
T t;
//添加方法
//作为方法参数
public void show(T t) {
System.out.println(t.toString());
}
//作为方法返回值
public T getT() {
return t;
}
}
public class MyGenericsTest {
public static void main(String[] args) {
MyGenerics<String> demo1 = new MyGenerics<String>();
demo1.t = "hello";
demo1.show("你好");
String string = demo1.getT();
System.out.println(string);
}
2)作为泛型接口
//泛型接口
//语法:接口名<T>
public interface MyInterface<T> {
String name = "张三";
T server(T t);
}
public class MyInterfaceImpl implements MyInterface<String> {
@Override
public String server(String s) {
System.out.println(s);
return null;
}
}
public class MyInterfaceTest {
public static void main(String[] args) {
impl.server("xxxxxxxx");
}
或者
//泛型接口
//语法:接口名<T>
public interface MyInterface<T> {
String name = "张三";
T server(T t);
}
public class MyInterfaceImpl<T> implements MyInterface<T> {
@Override
public T server(T t) {
System.out.println(t);
return null;
}
}
public class MyInterfaceTest {
public static void main(String[] args) {
MyInterfaceImpl<Integer> impl = new MyInterfaceImpl<>();
impl.server(10);
}
3)泛型方法
public class MyGenericsMethod {
//泛型方法
public <T> T show(T t) {
System.out.println("泛型方法" + t);
return t;
}
//public <T> void show(T t) {
// System.out.println("泛型方法" + t);
}
public class MyGenericsMethodTest {
public static void main(String[] args) {
MyGenericsMethod myGenericsMethod = new MyGenericsMethod();
myGenericsMethod.show("加油");
myGenericsMethod.show(10);
myGenericsMethod.show(3.14);
}
泛型集合
概念:参数化类型,类型安全的集合,强制集合元素的类型必须一致
特点:
编译时检查,而非运行时抛出异常
访问时,不必类型转换(拆箱)
不同泛型之间不能相互赋值,泛型不存在多态
public class Demo {
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("a");
arrayList.add("b");
for (String string : arrayList) {
System.out.println(string);
}
Iterator<String> iterator = arrayList.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
System.out.println(s);
}
}
}
``