Java_基础—泛型固定上/下边界

新建一个子类BaseStudent 继承其父类Student

package com.soar.bean;

public class BaseStudent extends Student {

    public BaseStudent(String name, int age) {
        super(name, age);
    }
    public BaseStudent() {
    }
}

新建一个Genric类

package com.saor.collections;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.TreeSet;

import com.soar.bean.BaseStudent;
import com.soar.bean.Student;

public class Demo2_Genric {
    /*
     * 泛型固定下边界
     * ? super E
     * 
     * 泛型固定上边界
     * ? extends E
     */
    public static void main(String[] args) {
        //demo_extends();
        TreeSet<Student> ts1 = new TreeSet<>(new CompareByAge());
        ts1.add(new Student("张三",33));
        ts1.add(new Student("李四",13));
        ts1.add(new Student("王五",23));
        ts1.add(new Student("赵六",43));

        TreeSet<BaseStudent> ts2 = new TreeSet<>(new CompareByAge());
        ts2.add(new BaseStudent("张三",33));
        ts2.add(new BaseStudent("李四",13));
        ts2.add(new BaseStudent("王五",23));
        ts2.add(new BaseStudent("赵六",43));
        //使用了父类的比较器
        System.out.println(ts2);
    }

    private static void demo_extends() {
        //父类 →固定了上边界E (Student)
        ArrayList<Student> list1 = new ArrayList<>();
        list1.add(new Student("张三",23));
        list1.add(new Student("李四",24));
        //子类→将上边界的E的子类(BaseStudent)添加到父类(Student)中,?代表的是E的子类
        ArrayList<BaseStudent> list2 = new ArrayList<>();
        list2.add(new BaseStudent("王五",25));
        list2.add(new BaseStudent("赵六",26));

        list1.addAll(list2);
    }

}

class CompareByAge implements Comparator<Student>{
    @Override
    public int compare(Student s1, Student s2) {
        int num = s1.getAge() - s2.getAge();
        return num ==0 ? s1.getName().compareTo(s2.getName()) : num;
    }

}
posted @ 2017-07-19 15:37  Soar_Sir  阅读(317)  评论(0编辑  收藏  举报