泛型的通配符的三种应用情况
package com.java.GeneriationDmeo.www;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
//写个动物的父类
class Animal{
private String name;
private String Sex;
public Animal() {
super();
// TODO Auto-generated constructor stub
}
public Animal(String name, String sex) {
super();
this.name = name;
Sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return Sex;
}
public void setSex(String sex) {
Sex = sex;
}
@Override
public String toString() {
return "Animal [name=" + name + ", Sex=" + Sex + "]";
}
}
//创建狗类继承父类
class Dog extends Animal{
private String name;
private String sex;
public Dog() {
super();
}
public Dog(String name, String sex) {
super(name, sex);
this.name=name;
this.sex=sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Dog [name=" + name + ", sex=" + sex + "]";
}
}
//创建一个猫类继承父类
class Cat extends Animal{
private String name;
private String sex;
public Cat() {
super();
}
public Cat(String name, String sex) {
super(name, sex);
this.name=name;
this.sex=sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Cat [name=" + name + ", sex=" + sex + "]";
}
}
public class GeneriationTest {
public static void main(String[] args) {
//创建一个Hashset集合
HashSet<Dog> set1=new HashSet<Dog>();
set1.add(new Dog("小黄","雌性"));
set1.add(new Dog("小黑","雄性"));
HashSet<Cat> set2=new HashSet<Cat>();
set2.add(new Cat("心如","雌性"));
set2.add(new Cat("冰冰","雌性"));
//迭代器
printList(set1);
}
/**
* 通用迭代器
* @param set
*/
private static void printList(HashSet<? extends Animal> set) {
for (Iterator<? extends Animal> it = set.iterator(); it.hasNext();) {
System.out.println(it.next());
}
}
}
/*
*
* 不同的集合类型以及不同的元素类型 在同一个方法中调用的时候,我们可以传入通配符来使方法得到扩展
* 通配符有三种使用方法
* 1.<?>不加任何限制的
* 2<? extends 类型1> 称为上限 可以传入类型1或者类型1的子类
* 3<? super 类型1>称为下限 可以传入类型1或者类型1的父类
*
* /