您的位置:首页 > 其它

泛型(三)

2016-03-24 22:46 232 查看
当操作的不同容器中的类型都不确定的时候,而且使用的都是元素从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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: