泛型类,普通泛型类,限制型,通配符
/**
* 自定义普通泛型类
* @author Administrator
*
* @param <T> 泛型
*/
//public class GenericTest<T> {
// private T member;
// public T getMember() {
// return member;
// }
// public void setMember(T member) {
// this.member = member;
// }
//}
public class Person {}
public class Student extends Person {}
public class Teacher {}
/**
* 限制型泛型类
* @author Administrator
*
* @param <T> 泛型
*/
public class GenericTest<T extends Person> {
private T member;
public T getMember() {
return member;
}
public void setMember(T member) {
this.member = member;
}
}
/**************普通泛型类的使用*****************/
// public static void main(String[] args) {
// GenericTest<String> generic = new GenericTest<String>();
// generic.setMember("abc");//正确,"abc"是字符串与泛型类型匹配
// //generic.setMember(100);//出错,100是整形与泛型类型不匹配
//
// //GenericTest<int> generic2 = new GenericTest<int>();//出错,泛型类型只能是引用类型,不能是原始类型
// GenericTest<Integer> generic2 = new GenericTest<Integer>();//正确
//
// GenericTest<Person> generic3 = new GenericTest<Person>();//正确
// Person p = new Person();
// p.setName("张三");
// p.setAge(23);
// generic3.setMember(p);
// }
/**************限制型的泛型类的使用*****************/
// public static void main(String[] args) {
// GenericTest<Student> g1 = new GenericTest<Student>();//正确,因为Student有继承Person
// GenericTest<Teacher> g2 = new GenericTest<Teacher>();//错误,因为Teacher没有继承Person
// GenericTest<Person> g3 = new GenericTest<Person>();//正确,可以使用父类本身
// }
/**************通配符在泛型类中的使用*****************/
// public static void main(String[] args) {
// //?是通配符,代表符合要求的类型
// GenericTest<? extends Person> g1 = new GenericTest<Student>();//正确
// GenericTest<? extends Person> g2 = new GenericTest<Teacher>();//错误
// GenericTest<? extends Person> g3 = new GenericTest<Person>();//正确
//
// GenericTest<? super Student> g4 = new GenericTest<Person>();//正确
// GenericTest<? super Student> g5 = new GenericTest<Student>();//正确
// GenericTest<? super Student> g6 = new GenericTest<Teacher>();//出错
// }