java ? super E 和 ? extends E

/**
     * 泛型固定下边界
     * ? super E
     *
     * 泛型固定上边界
     * ? extends E
     */
    public static void main(String[] args) {
        //demo1();
        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);
    }

    public static void demo1() {
        ArrayList<Student> list1 = new ArrayList<>();
        list1.add(new Student("张三", 23));
        list1.add(new Student("李四", 24));

        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;
    }

}
时间: 2024-10-26 02:09:12

java ? super E 和 ? extends E的相关文章

浅谈Java泛型中的extends和super关键字(转)

泛型是在Java 1.5中被加入了,这里不讨论泛型的细节问题,这个在Thinking in Java第四版中讲的非常清楚,这里要讲的是super和extends关键字,以及在使用这两个关键字的时候为什么会不同的限制.    首先,我们定义两个类,A和B,并且假设B继承自A.下面的代码中,定义了几个静态泛型方法,这几个例子随便写的,并不是特别完善,我们主要考量编译失败的问题: public class Generic{ //方法一 public static <T extends A> void

java泛型中&lt;? super String&gt;和&lt;? extends String&gt; 的区别

(1)<? super String> is any class which is a superclass of String (including String itself). (In this case, the only other suitable class is Object.) 即包括String的父类和它本身的类. (2) <? extends String> (which in this specific case wouldn't be very usefu

浅谈Java泛型中的extends和super关键字

泛型是在Java 1.5中被加入了,这里不讨论泛型的细节问题,这个在Thinking in Java第四版中讲的非常清楚,这里要讲的是super和extends关键字,以及在使用这两个关键字的时候为什么会不同的限制.  首先,我们定义两个类,A和B,并且假设B继承自A. package com.wms.test; import java.util.ArrayList; import java.util.List; public class Generic { public static void

Java泛型 通配符? extends与super

本文来源:https://i.cnblogs.com/EditPosts.aspx?opt=1 感谢博主.本文仅供参考学习. Java 泛型 关键字说明 ? 通配符类型 <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类 <? super T> 表示类型下界(Java Core中叫超类型限定),表示参数化类型是此类型的超类型(父类型),直至Object extends 示例 static class Food{} static class Frui

如何理解 Java 中的 &lt;T extends Comparable&lt;? super T&gt;&gt;

1 <T extends Comparable<T>> 和 <T extends Comparable<? super T>> 有什么不同 <T extends Comparable<T>> 类型 T 必须实现 Comparable 接口,并且这个接口的类型是 T.只有这样,T 的实例之间才能相互比较大小.例如,在实际调用时若使用的具体类是 Dog,那么 Dog 必须 implements Comparable<Dog>

Difference between &lt;? super T&gt; and &lt;? extends T&gt; in Java

I love the answer from @Bert F but this is the way my brain sees it. I have an X in my hand. If I want to write my X into a List, that List needs to be either a List of X or a List of things that my X can be upcast to as I write them in i.e. any supe

Java泛型中的extends和super关键字

理解List<? extends T> list, T key, Comparator<? super T> c 这些一般用在方法形参类型上,用于接受泛型对象. 1.List<? extends T> 代表任意T的子类,比如List<? extends Person>表示可以接受任意一个泛型类型是任意Person子类的list对象,这个一般用于方法调用,表示接受的每一个List<? extends Person>中的元素都is a Person,

java super关键字

子类用super操作被隐藏的成员变量和方法 Example5_7.java class Sum { int n; float f() { float sum=0; for(int i=1;i<=n;i++) sum=sum+i; return sum; } } class Average extends Sum { int n; float f() { float c; super.n=n; c=super.f(); return c/n; } float g() { float c; c=su

泛型中? super T和? extends T的区别

来源:并发编程网 链接:http://ifeve.com/difference-between-super-t-and-extends-t-in-java/ 经常发现有List<? super T>.Set<? extends T>的声明,是什么意思呢?<? super T>表示包括T在内的任何T的父类,<? extends T>表示包括T在内的任何T的子类,下面我们详细分析一下两种通配符具体的区别. extends List<? extends Nu