- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读“Thinking in java”中的泛型章节。该程序在下面。
public class GenericWriting {
static <T> void writeExact(List<T> list, T item) {
list.add(item);
}
static List<Apple> apples = new ArrayList<Apple>();
static List<Fruit> fruit = new ArrayList<Fruit>();
static void f1() {
writeExact(apples, new Apple());
// writeExact(fruit, new Apple()); // Error:------------------line 1
// Incompatible types: found Fruit, required Apple
}
static <T> void writeWithWildcard(List<? super T> list, T item) {
list.add(item);
}
static void f2() {
writeWithWildcard(apples, new Apple());
writeWithWildcard(fruit, new Apple());
}
public static void main(String[] args) { f1(); f2(); }
}
下面它说“writeExact( ) 方法使用精确的参数类型(无通配符)。在 f1( ) 中你可以看到它工作正常——只要你只将 Apple 放入 List<Apple>
中。然而, writeExact( ) 不允许您将 Apple 放入 List<Fruit>
中,即使您知道这应该是可能的。”
但是当我取消注释第 1 行并执行它时,它工作正常。谁能帮我解决我哪里出错了?
最佳答案
However,
writeExact( )
does not allow you to put anApple
into aList<Fruit>
, even though you know that should be possible.
这是不正确的。 writeExact
可以放一个Apple
在List<Fruit>
. <T>
推断为 Fruit
和 Apple
(大概)是 Fruit
的子类型.
这本书有一个错误。我可以确认,当引入泛型时,这将在 Java 5 中编译。
关于java - Bruce Eckel 的 "Thinking in Java"中的这个泛型示例是否错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26747867/
struct X; struct Y { void f(X*); }; struct X { //definition private: int i; public: friend voi
我正在阅读“Thinking in java”中的泛型章节。该程序在下面。 public class GenericWriting { static void writeExact(List
我一直在阅读 Thinking in python布鲁斯埃克尔。目前,我正在阅读模式概念一章。在本章中,Eckel 展示了单例在 python 中的不同实现。但是我对Alex Martelli的单例代
以下是 Bruce Eckel 的 Thinking in C++ 的一段话(第 1 卷,第 2 版,第 11 章)在“成员指针”标题下: …a pointer needs an address, b
这里引用 Bruce Eckel 的书“Thinking in Java”: The method argument list specifies what information you pass
有谁知道如何在 java 文件中构建 Bruce eckels 的 Thinking 以在 Eclipse 上运行。并且能够把它解释清楚。我已经尝试了好几天了,使用 stackoverflow 但没有
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我试图理解将友元声明注入(inject)命名空间: #include using namespace std; namespace Z { //forward declaration class
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我是一名优秀的程序员,十分优秀!