我在阅读泛型时遇到了PECS(制片extends人和消费者的super简称).
能否给我一个人解释如何使用佩奇之间解决困惑extends和super?
有一个很好的讨论泛型和他们在这个问题的幕后真正做了什么,所以我们都知道这Vector<int[]>是一个整数数组的向量,并且HashTable<String, Person>是一个表,其键是字符串和值Persons.然而,困扰我的是使用Class<>.
java类Class也应该采用模板名称,(或者我在eclipse中通过黄色下划线告诉我).我不明白我应该放在那里.Class对象的整个要点是当您没有完全拥有关于对象,反射等的信息时.为什么它让我指定Class对象将保持哪个类?我显然不知道,或者我不会使用该Class对象,我会使用具体的一个.
我正在尝试学习Java泛型.我不清楚你什么时候使用<T extends Foo>以及何时使用<T super Foo>.这些事情中的每一个对T意味着什么?可以说我有<T extends Comparable>和<T super Comparable>,什么每个这些是什么意思?
我在sun.com上看过几个教程,但我还是迷路了.有人能举例说明吗?
谢谢!
在阅读Stream界面源代码时,我发现了这个方法签名:
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
Run Code Online (Sandbox Code Playgroud)
我想知道为什么输入类型mapper是? super T输出类型? extends R,为什么不? extends用于两者?
我想做这样的事情
final Map<String, ? extends Object> params = new HashMap<String, ? extends Object>();
Run Code Online (Sandbox Code Playgroud)
但java编译抱怨说"无法实例化HashMap();
什么是旺了...?
我对以下两个方法声明感到困惑:
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 T和T super T都是有效的.对 ?
我很难理解泛型外卡的概念.
根据我的理解<?>类型,引入未知来解决泛型中不支持的协方差,它应该适合任何类型的集合,并且<?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)
它有效,但我怀疑的地方是:
根据我的理解,(extends和super)包括声明的类型,因此在这种特殊情况下,因为我List的类型String.我可以交换扩展和超级,但我得到编译错误?
如果写? super Object不起作用?它应该工作,因为它超级String? …