泛型(三)

当操作的不同容器中的类型都不确定的时候,而且使用的都是元素从Object类中继承的方法,这时泛型就用通配符?来表示即可。(助理解的比方:泛型中的多态应用)

对操作的类型限制在一个范围之内。比如:定义一个功能,只操作Person类型或者Person的子类型。这时可以用: 

?extends E:接收E类型或者E的类型。这就是上限

? superE:   接收E类型或者E的类型。 这就是下限

package cn.hncu.generic.three;


import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;


public class DemoAdv {


public static void main(String[] args) {
// t1();
t2();//方法
t3();//通配符
}


private static void t1() {
ArrayList<String> list=new ArrayList<String>();
list.add("abc");
list.add("abcd");
list.add("abce");
list.add("abcf");
for(String s:list){//增强For循环:记住这种用法
System.out.println(s.toString());
}
System.out.println("___________");

ArrayList<Double> list2=new ArrayList<Double>();
list2.add(Double.valueOf("1.23"));
list2.add(Double.valueOf("1.233"));
list2.add(Double.valueOf("1.232"));
list2.add(Double.valueOf("1.234"));

Iterator<Double> it=list2.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println("___________");
}
//t2
private static void t2() {
HashSet<String> set=new HashSet<String>();
set.add("AAA");
set.add("bbb");
set.add("ccc");
set.add("ddd");
printSet(set);
System.out.println("___________");
HashSet<Integer> set2=new HashSet<Integer>();
set2.add(1);
set2.add(2);
set2.add(3);
set2.add(4);
printSet2(set2);
}


private static void printSet2(HashSet<Integer> set2) {
for(int x:set2){
System.out.println(x);
}
}
private static void printSet(HashSet<String> set) {
Iterator<String> it=set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}


//v3
private static void t3(){
TreeMap<Integer, String> map=new TreeMap<Integer, String>();
map.put(1, "A");
map.put(2, "B");
map.put(4, "C");
map.put(5, "D");
print(map);
System.out.println("___________");
print2(map);//这样也可以
}


private static void print(TreeMap<?, ?> map) {
Set<?> s=map.entrySet();
Iterator<?> it=s.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
private static void print2(TreeMap<?, ?> map) {
Set<?> s=map.entrySet();
for(Object obj:s){
System.out.println(obj.toString()+"###");
}
}
}




package cn.hncu.generic.three;


import java.util.ArrayList;
import java.util.Iterator;


public class DemoAdv2 {


public static void main(String[] args) {
t1();
}


private static void t1() {
ArrayList<Person> list=new ArrayList<Person>();
list.add(new Person("Wang", 12));
list.add(new Person("LI", 42));
list.add(new Person("Chen", 22));
list.add(new Person("Ou", 32));
print(list);
System.out.println("____________");
ArrayList<Student> list2=new ArrayList<Student>();
list2.add(new Student("Wang", 12));
list2.add(new Student("LI", 42));
list2.add(new Student("Chen", 22));
list2.add(new Student("Ou", 32));
System.out.println(new Student("Ou", 32));
print2(list2);

}


private static void print2(ArrayList< ? extends Person> list) {
Iterator<? extends Person> it=list.iterator();//这里也要改
while(it.hasNext()){
System.out.println(it.next().getName());
}

}


private static void print(ArrayList<?> list) {
for(Object obj:list){
System.out.println(obj);
}
}


}
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
class Student extends Person{
private String name;
private int age;
private int id;
public Student(String name, int age) {
super(name, age);
this.name=name;
this.age=age;
}
public Student(String name, int age, int id) {
super(name, age);
this.name=name;
this.age=age;
this.id = id;
}
@Override
public String toString() {
return "\\&&&"+"Student [name=" + name + ", age=" + age + ", id=" + id + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值