javaSE基礎-泛型定義

package com.zy.jczyw.testcase.fanxing;

class Teacher{
	
}

class Student{
	
}

/**
 * 定義泛型類參數
 * @author jinpc
 * @createTime 2020年6月23日 下午12:27:49
 * @Version
 * @Description
 */
public class GenericUtilClass<T> {

	private T t;

	public T getObject() {
		return t;
	}

	public void setObject(T t) {
		this.t = t;
	}
	
}

class GenericClassDemo {
	public static void main(String[] args) {
		/**
		 * 有操作者決定操作什麼類型
		 */
		GenericUtilClass<Teacher> guc = new GenericUtilClass<Teacher>();
		guc.setObject(new Teacher());
		Teacher teacher = guc.getObject();
	}
}
import java.util.ArrayList;
import java.util.Iterator;

/**
 * 
 * @author jinpc
 * @createTime 2020年6月23日 下午2:41:53
 * @Version
 * @Description 泛型測試例子
 */
public class GenericClassDemo2 {

	public static void main(String[] args) {
		ArrayList<Person> arr1 = new ArrayList<Person>();
		arr1.add(new Person("java"));
		arr1.add(new Person("python"));
		
		/**
		 * 注意 和多態定義有區別 以下爲錯誤形式 前後必須一樣
		 * ArrayList<Person> arr2 = new ArrayList<StudentDemo>();
		 * ArrayList<StudentDemo> arr2 = new ArrayList<Person>();
		 */
		ArrayList<StudentDemo> arr2 = new ArrayList<StudentDemo>();
		arr2.add(new StudentDemo("java---s"));
		arr2.add(new StudentDemo("python---s"));
		
		printCollection(arr2);
		
	}
	
	//定義一個方法打印所有類型list集合
	/**
	 * 兩種定義方法
	 * 字母指代泛型方式
	 * 	public static <T> void printCollection(ArrayList<T> arr)
	 * 	T 可以具體操作
	 * ? 通配形式 不可進行操作
	 * 	泛型的限定:
	 * ? extends E 可以接收E或者其子類
	 * ? super E 可以接收E或者其父類
	 */
	public static void printCollection(ArrayList<? extends Person> arr) {
		Iterator<? extends Person> it = arr.iterator();
		while(it.hasNext()) {
			System.out.println(it.next().getName());
		}
	}
}

class Person{
	private String name;
	Person(String name){
		this.name = name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
}

class StudentDemo extends Person{

	StudentDemo(String name) {
		super(name);
	}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章