泛型
本质:参数化类型,把类型作为参数传递
常见形式:泛型类。泛型接口 泛型接口
语法: <T,…>T称为类型占位符 表示一种引用类型 (E , K ,V)
好处:
- 提高代码的重用性
- 防止类型转换异常,提高代码的安全性
泛型类
package com.etc.chapater;
/*
* 泛型类
* 语法:类名<T>
* T是类型占位符 表示一种引用类型 如果编写多个使用逗号隔开
* */
public class MyGeneric<T> {
//使用泛型T
//1.创建变量
T t;
//2.泛型作为方法的变量
public void show(T t){
System.out.println(t);
}
//3.泛型作为方法的返回值
public T getT(){
return t;
}
}
package com.etc.chapater;
public class TestGeneric {
public static void main(String[] args) {
//使用泛型创建对象
MyGeneric<String> myGeneric = new MyGeneric<String>();
myGeneric.show("泛型创建对象");
myGeneric.t="hello" ;
String string = myGeneric.getT();
System.out.println(string);
MyGeneric<Integer> myGeneric1 = new MyGeneric<Integer>();
myGeneric1.show(1000);
myGeneric1.t=200;
Integer integer = myGeneric1.getT();
System.out.println(integer);
}
}
泛型接口
package com.etc.chapater;
/*
* 泛型接口
* 语法:接口名<T>
* 注意:不能泛型静态常量
*
* */
public interface MyInterface<T> {
String name = "张";
T server(T t);
}
package com.etc.chapater;
public class MyInterfaceImpl implements MyInterface<String> {
@Override
public String server(String s) {
System.out.println(s);
return s;
}
}
package com.etc.chapater;
public class MyInterfaceImpl2<T> implements MyInterface<T> {
@Override
public T server(T t) {
System.out.println(t);
return t;
}
}
MyInterfaceImpl impl = new MyInterfaceImpl();
impl.server("chen");
MyInterfaceImpl2<Integer> impl2 = new MyInterfaceImpl2<>();
impl2.server(100);
泛型方法
package com.etc.chapater;
/**
*泛型方法
* 语法:<T> 返回值类型
*
*/
public class MyGenericMethod {
//泛型方法
public <T> T show(T t){
System.out.println("泛型方法"+t);
return t;
}
}
//泛型方法
MyGenericMethod myGenericMethod = new MyGenericMethod();
myGenericMethod.show(1000);
泛型集合
package com.etc.chapater;
import com.etc.chen.Student;
import java.util.ArrayList;
import java.util.Iterator;
/**
*泛型集合
*/
public class Demo03 {
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("chen");
arrayList.add("ma");
for (String string:arrayList
) {
System.out.println(string);
}
ArrayList<Student> arrayList1 = new ArrayList<Student>();
Student s1 = new Student("m",20);
Student s2 = new Student("s",21);
Student s3 = new Student("j",22);
arrayList1.add(s1);
arrayList1.add(s2);
arrayList1.add(s3);
Iterator<Student> iterator = arrayList1.iterator();
while (iterator.hasNext()) {
Student student = iterator.next();
System.out.println(student.toString());
}
}
}