首页 > 代码库 > 泛型类,普通泛型类,限制型,通配符

泛型类,普通泛型类,限制型,通配符

 /**
 * 自定义普通泛型类
 * @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>();//出错
// }