Java泛型

泛型的基本用法
泛型就是参数化类型。

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);
		
	}
	
}

运行结果:
Java泛型_第1张图片

------------------------------------------------------------------------------------------------------------------------------

使用继承的方式限定范围
使用泛型继承的方式可以缩小泛型的范围。

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 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();
	}
}

运行结果:
Java泛型_第2张图片

你可能感兴趣的:(Java)