Java 泛型在API中的体现
- 首先创建Person类和两个子类 Worker类和Student类
/* person 类*/
public class Person implements Comparable
private String name;
private int age;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
// 省略 getter 和 setter方法
@Override
public String toString() {
return “Person [name=” + name + “, age=” + age + “]“;
}
@Override
public int compareTo(Person o) { // 按年龄排序
int temp = this.age - o.age;
return temp == 0 ? this.name.compareTo(o.name) : temp;
}
}
/* student 类 */
public class Student extends Person {
public Student() {
super();
}
public Student(String name, int age) {
super(name, age);
}
@Override
public String toString() {
return “Student [name()=” + getName() + “, age()=” + getAge() + “]“;
}
}
/* worker 类 */
public class Worker extends Person {
public Worker() {
super();
}
public Worker(String name, int age) {
super(name, age);
}
@Override
public String toString() {
return “Worker [name()=” + getName() + “, age()=” + getAge()+ “]“;
}
}
/** ————————————————————————-泛型上限的体现————————————————————————————*/
/**
* @作者 atyang
*
* TreeSet(Collection<? extends E> c) :上限的体现,,类型可以是 E或E的子类型
*/
public class UpDemo {
public static void main(String[] args) {
// 创建一个collection集合
//Collection
//c.add(new Person(“lisi”, 18));
//c.add(new Person(“aangwu”, 23));
Collection
c2.add(new Student(“lisi”, 18));
c2.add(new Student(“aangwu”, 23));
/*
* TreeSet 集合在创建时就将 c 存入TreeSet集合中
*
* TreeSet 集合中传入的Collection集合存储的元素类型可以是 Person ,也可以是 person的子类型
* TreeSet
*/
TreeSet
person.add(new Person(“zhangsan”, 21));
for (Iterator
Person person2 = it.next();
System.out.println(person2);
}
}
}
/*
class TreeSet
TreeSet
}
*/
/**————————————————————————————————泛型下限的体现———————————————————————*/
/**
* @作者 at杨
*
* 泛型中下限在 API中的体现 TreeSet(Comparator<? super E> comparator),,常用在比较器中
*/
public class DownDemo {
public static void main(String[] args) {
// 创建一个集合存储的是学生对象,按姓名排序
/*
* TreeSet 集合在创建时传入一个比较器,
* 比较器的参数类型可以是该集合的参数类型,也可以定义为该集合参数类型的父类类型
*
* TreeSet
*/
TreeSet
stu.add(new Student(“aaa”, 18));
stu.add(new Student(“aab”, 21));
stu.add(new Student(“abcc”, 23));
for (Iterator
Student ts = it.next();
System.out.println(ts);
}
// 让工人按姓名排序
TreeSet
wok.add(new Worker(“aaa”, 18));
wok.add(new Worker(“aab”, 22));
wok.add(new Worker(“abcc”, 23));
for (Iterator
Worker wo = it.next();
System.out.println(wo);
}
}
}
/*
* 以下两个比较器,都是按照姓名进行排序,就是类型不同,一个是Student,一个是Worker 既然使用的都是
* Person的内容,为什么不定义一个 Person 的比较器?
*/
class comparaByName implements Comparator
@Override
public int compare( Person o1 , Person o2) {
int temp = o1.getName().compareTo(o2.getName());
return temp == 0 ? o1.getAge() - o2.getAge() : temp;
}
}
// 定义一个比较器,排序学生
/*
class comparaByName implements Comparator
@Override
public int compare(Student o1, Student o2) {
int temp = o1.getName().compareTo(o2.getName());
return temp == 0 ? o1.getAge() - o2.getAge() : temp;
}
}
*/
// 定义一个比较器,排序工人
/*
class comparaWorkByName implements Comparator
@Override
public int compare(Worker o1, Worker o2) {
int temp = o1.getName().compareTo(o2.getName());
return temp == 0 ? o1.getAge() - o2.getAge() : temp;
}
}
*/
/*
TreeSet
TreeSet
}
*/
还没有评论,来说两句吧...