相关疑难解决方法(0)

Java Generics中'super'和'extends'之间的区别是什么?

我正在尝试学习Java泛型.我不清楚你什么时候使用<T extends Foo>以及何时使用<T super Foo>.这些事情中的每一个对T意味着什么?可以说我有<T extends Comparable><T super Comparable>,什么每个这些是什么意思?

我在sun.com上看过几个教程,但我还是迷路了.有人能举例说明吗?

谢谢!

java generics

78
推荐指数
5
解决办法
4万
查看次数

java泛型超级关键字

我经历了这些话题

但是,我似乎仍然丢失了super关键字:

  1. 当我们声明一个这样的集合时:

    List<? super Number> list = null;
    list.add(new Integer(0));//this compiles
    list.add(new Object());//this doesn't compile
    
    Run Code Online (Sandbox Code Playgroud)

    不应该是相反的 - 我们有一个列表,其中包含一些父母的对象(未知类型)Number.所以Object应该适合(因为它是父的Number),Integer不应该.出于某种原因,情况正好相反.

  2. 只要我们有以下代码

    static void test(List<? super Number> param) {
        param.add(new Integer(2));
    }
    public static void main(String[] args) {
        ArrayList<String> sList = new ArrayList<String>();
        test(sList);            //will never compile, however...
    }
    
    Run Code Online (Sandbox Code Playgroud)

    编译上面的代码是不可能的(我的理智表明这是正确的行为),但基本逻辑可能证明相反:

    String is Object, Object is superclass of Number. So String should work.

    我知道这很疯狂,但这不是他们不允许<S super T>构造的原因吗?如果是,那么为什么<? super T> …

java generics

71
推荐指数
4
解决办法
4万
查看次数

标签 统计

generics ×2

java ×2