相关疑难解决方法(0)

什么是PECS(制作人扩展消费者超级)?

我在阅读泛型时遇到了PECS(制片extends人和消费者的super简称).

能否给我一个人解释如何使用佩奇之间解决困惑extendssuper

java generics super pecs bounded-wildcard

680
推荐指数
11
解决办法
9万
查看次数

如何在Java中使用Class <T>?

有一个很好的讨论泛型和他们在这个问题的幕后真正做了什么,所以我们都知道这Vector<int[]>是一个整数数组的向量,并且HashTable<String, Person>是一个表,其键是字符串和值Persons.然而,困扰我的是使用Class<>.

java类Class也应该采用模板名称,(或者我在eclipse中通过黄色下划线告诉我).我不明白我应该放在那里.Class对象的整个要点是当您没有完全拥有关于对象,反射等的信息时.为什么它让我指定Class对象将保持哪个类?我显然不知道,或者我不会使用该Class对象,我会使用具体的一个.

java generics templates class

237
推荐指数
7
解决办法
48万
查看次数

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万
查看次数

函数输入类型的通用有界通配符

在阅读Stream界面源代码时,我发现了这个方法签名:

<R> Stream<R> map(Function<? super T, ? extends R> mapper);
Run Code Online (Sandbox Code Playgroud)

我想知道为什么输入类型mapper? super T输出类型? extends R,为什么不? extends用于两者?

java generics java-8

15
推荐指数
3
解决办法
946
查看次数

为什么我不能创建一个String和泛型对象的Map

我想做这样的事情

  final Map<String, ? extends Object> params = new HashMap<String, ? extends Object>();
Run Code Online (Sandbox Code Playgroud)

但java编译抱怨说"无法实例化HashMap();

什么是旺了...?

java generics hashmap map

11
推荐指数
1
解决办法
2万
查看次数

是不是<U,T延伸U>和<T,U super T>相同?

我对以下两个方法声明感到困惑:

    private <U, T extends U> T funWorks(T child, U parent) {
      // No compilation errors
    }

    private <T, U super T> T funNotWorks(T child, U parent) {
      // compilation errors    
    }
Run Code Online (Sandbox Code Playgroud)

以上两者都不应该有效吗?比喻 如果U是T的父,那么T是U的子.那为什么第二个会出现编译错误?

编辑::我认为,T extends TT super T都是有效的.对 ?

java generics collections type-parameter

8
推荐指数
1
解决办法
384
查看次数

为什么有必要在泛型通配符中进行读取和超级写入时进行扩展?

我很难理解泛型外卡的概念.

根据我的理解<?>类型,引入未知来解决泛型中不支持的协方差,它应该适合任何类型的集合,并且<?extends T>意味着您可以拥有类型集合T或扩展的类T.<?super T>意味着您可以拥有类型集合T或超级(的)T.

如果上述错误,请纠正我.

当我尝试这样写时:

import java.util.*;

public class Gclass {
    static Gclass t;

    public void write(List< ?super String > lw){
        lw.add("b");
    }

    public void read(List< ? extends String> lr){
        String s=lr.get(2);
        System.out.println(s);
    }

    public static void main(String[] args) {
        t=new Gclass();
        List<String> l=new ArrayList<String>();
        l.add("a");
        l.add("");
        System.out.println(l);
        t.write(l);
        System.out.println(l);
        t.read(l);
        System.out.println(l);
    }
}
Run Code Online (Sandbox Code Playgroud)

它有效,但我怀疑的地方是:

  1. 根据我的理解,(extends和super)包括声明的类型,因此在这种特殊情况下,因为我List的类型String.我可以交换扩展和超级,但我得到编译错误?

  2. 如果写? super Object不起作用?它应该工作,因为它超级String? …

java generics

3
推荐指数
1
解决办法
138
查看次数