泛型的基本用法
泛型就是参数化类型。
public class MyList {
public void add(T item) {
}
public T get() {
return null;
}
}
public class Test {
public static void main(String[] args) {
MyList list = new MyList();
MyList list2 = new MyList();
list.add("字符串");
list.get();
list2.add(18);
list2.get();
}
}
------------------------------------------------------------------------------------------------------------------------------
模拟List的添加与获取
public class MyList {
Object[] arr = new Object[10];
int n = 0;
public void add(T item) {
arr[n++] = item;
}
public T get(int index) {
return (T) arr[index];
}
}
public class Test {
public static void main(String[] args) {
MyList list = new MyList();
list.add("无尽战刃");
list.add("极寒风暴");
String str1 = list.get(0);
String str2 = list.get(1);
System.out.println(str1 +"," + str2);
}
}
------------------------------------------------------------------------------------------------------------------------------
使用继承的方式限定范围
使用泛型继承的方式可以缩小泛型的范围。
public class MyList {
Object[] arr = new Object[10];
int n = 0;
public void add(T item) {
arr[n++] = item;
}
public T get(int index) {
return (T) arr[index];
}
}
public class Test {
public static void main(String[] args) {
MyList list = new MyList();
list.add("无尽战刃");
list.add("极寒风暴");
String str1 = list.get(0);
String str2 = list.get(1);
System.out.println(str1 +"," + str2);
}
}
------------------------------------------------------------------------------------------------------------------------------
通配符
泛型通配符 ?是实参。直接写,不需要声明。
声明的 T 是个形参。
public class MyList {
Object[] arr = new Object[10];
int n = 0;
public void add(T item) {
arr[n++] = item;
}
public T get(int index) {
return (T) arr[index];
}
}
public class Test {
public static void main(String[] args) {
MyList list = new MyList();
foreach(list);
}
public static void foreach(MyList extends CharSequence> list) {
}
}
------------------------------------------------------------------------------------------------------------------------------
方法级别的泛型声明
泛型也可以定义在方法当中,在方法的返回值前面声明一个泛型(其实就是把声明的位置换成了方法上)。
public class Test {
public static void main(String[] args) {
System.out.println(hello("HelloWorld!"));
}
public static String hello(A text) {
return text.toString();
}
}
------------------------------------------------------------------------------------------------------------------------------
结果的自动匹配与识别
调用的时候用什么类型接收,就会识别为什么类型。
public abstract class Animal {
public abstract void say();
}
public class Dog extends Animal{
public void say() {
System.out.println("汪汪汪!");
}
}
public class Cat extends Animal{
public void say() {
System.out.println("喵喵喵!");
}
}
public class Test {
public static void main(String[] args) {
Utils u = new Utils();
Dog d = u.get(0);
Cat c = u.get(1);
d.say();
c.say();
}
}