我是java新手,我在网上读了很多关于的文章。超级T
还是?扩展T
,但我还是不明白。下面是我的例子:
public class A<T> {
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
public void doExtends(A<? extends T> b) {
T t = b.getT(); //ok
this.setT(b.getT()); // ok
b.setT(this.getT()); // error
}
public void doSuper(A<? super T> b) {
T t = b.getT(); // error
this.setT(b.getT()); // error
b.setT(this.getT()); // ok
}
}
为什么会有错误?我的问题和评论中提到的不同
事情是这样的:
在doExtends(A)中
接下来是
doSuper(A
问题内容: 与完全跳过它们相比,在类中使用通配符类型的泛型有什么优势吗? 问题答案: 有很多优点。 他们不会像使用原始类型那样产生编译器警告 它们提供了更多的类型安全性。例如,考虑是否是。如果您使用代替,则可以执行以下操作: 即使该列表仅 应 包含s。如果返回,则您将无法添加 任何 内容(除外),因为列表类型未知。 他们记录的东西与原始类型完全不同,即使用某种 未知但特定的类型进行输入 。
我很困惑,如果下面的方法是相同的?有什么细微的区别吗? 非常感谢你的建议。 方法1 方法二
问题内容: 我有一个非常基本的问题。 以下代码无法编译(假设Apple扩展了Fruit): 在阅读有关为什么不阅读的内容时,我理解的是单词,但不理解概念:)。 假设第一个Fruit不是抽象类。我知道,由于我们正在处理多个子类型,所有这些子类型都扩展了Fruit。据推测,由于我们无法分辨出确切的水果类型,因此我们无法在集合中放入任何东西。有几件事我不明白: 1)显然我们不知道是哪个水果让我感到困惑。
这个问题的答案表明,当方法采用通配符泛型类型时,可以访问或修改集合,但不能同时访问或修改集合。(凯西和伯特) 据我所知,方法do1有,因此d2只能被访问,不能被修改。方法d2具有,因此可以访问和修改c2,并且没有编译错误。 通用指南
问题内容: 我正在尝试进入instagram页面,但没有运气。我不断收到错误和空白的屏幕截图。 错误文字: Casperjs –version是1.1.0-beta3。 基本上,我使用以下代码: 问题答案: 如果使用了PhantomJS 2,则不再需要下面的垫片。不幸的是,CasperJS1.1-beta3还不支持它,因此您可能想要使用GitHub的master分支。 问题是PhantomJSv1
问题内容: 该问题的答案表明,当方法采用通配符通用类型时,可以访问或修改集合,但不能同时访问或修改集合。(凯西和伯特) 这是什么意思?“ 当方法采用通配符通用类型时,可以访问或修改集合,但不能同时访问两者 ”? 据我所知,方法do1具有d2只能访问但不能修改。d2的方法使c2可以被访问和修改,并且没有编译错误。 通用准则 问题答案: 该问题的答案表明,当方法采用通配符通用类型时,可以访问或修改集合