Java 泛型在API中的体现

超、凢脫俗 2022-06-13 08:10 250阅读 0赞
  1. 首先创建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;
}

  1. // 省略 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 = new ArrayList();
//c.add(new Person(“lisi”, 18));
//c.add(new Person(“aangwu”, 23));

Collection c2 = new ArrayList();
c2.add(new Student(“lisi”, 18));
c2.add(new Student(“aangwu”, 23));

/*
* TreeSet 集合在创建时就将 c 存入TreeSet集合中
*
* TreeSet 集合中传入的Collection集合存储的元素类型可以是 Person ,也可以是 person的子类型
* TreeSet person = new TreeSet(Collection<? extends T> c);
*/
TreeSet person = new TreeSet(c2); // c2 即满足 Collection<? extends T>
person.add(new Person(“zhangsan”, 21));

for (Iterator it = person.iterator(); it.hasNext();) {
Person person2 = it.next();
System.out.println(person2);
}
}
}

/*
class TreeSet {
TreeSet(Collection<? extends E> c){ }
}
*/

/**————————————————————————————————泛型下限的体现———————————————————————*/

/**
* @作者 at杨
*
* 泛型中下限在 API中的体现 TreeSet(Comparator<? super E> comparator),,常用在比较器中
*/
public class DownDemo {

public static void main(String[] args) {

// 创建一个集合存储的是学生对象,按姓名排序
/*
* TreeSet 集合在创建时传入一个比较器,
* 比较器的参数类型可以是该集合的参数类型,也可以定义为该集合参数类型的父类类型
*
* TreeSet person = new TreeSet(Comparator<? super T> c);
*/
TreeSet stu = new TreeSet(new comparaByName());
stu.add(new Student(“aaa”, 18));
stu.add(new Student(“aab”, 21));
stu.add(new Student(“abcc”, 23));

for (Iterator it = stu.iterator(); it.hasNext();) {
Student ts = it.next();
System.out.println(ts);
}

// 让工人按姓名排序
TreeSet wok = new TreeSet(new comparaByName());
wok.add(new Worker(“aaa”, 18));
wok.add(new Worker(“aab”, 22));
wok.add(new Worker(“abcc”, 23));

for (Iterator it = wok.iterator(); it.hasNext();) {
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(Comparator(? super E)){ };
}
*/

发表评论

表情:
评论列表 (有 0 条评论,250人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java多态问题体现

    Java泛型是一种类型参数化的方式,它使得代码更加通用和灵活。在多态问题中,泛型主要体现在以下几个方面: 1. 泛型类:例如List<T>,其中T是一个可变的类型参数。这样创