我学完了泛型,但我发现它并不容易。不过,我确实明白了。这是我的理解。我希望你纠正我的错误并回答几个问题:)。
public class LinkedList<T> {
//class definition
}
public class LinkedList<T extends Object> {
//class definition
}
public class LinkedList<T extends Object & java.lang.Serializable> {
//class definition
}
public class LinkedList<T> implements Iterable<T> {
//class definition
}
Itarator<T>
的内部类并重载hasNext()、next()和remove()问题
1. 如果可能,请用简单的词语并举例说明其含义:
公开课
BinaryTree<T extends Comparable<? super T>>
什么取代了?
2. 我想使用 writeObject() 方法将上面提到的 LinkedList<> 类写入文件。所以我将其声明为
public class LinkedList<T extends Object> implements Serializable {
//methods and data members
private class Node implements Serializable { //inner class
T object;
Node next;
}
}
内部类也必须实现 Serialized 吗?
最佳答案
关于您的前四点:
- 应该包含
T
实例的列表(包括扩展T
的类)。 - 实际上与第一个相同,因为所有类都扩展
Object
. - 只能包含
Serializable
的对象的列表(与class LinkedList<T extends Serializable> { ... }
相同) - 可迭代列表
T
,所以是的,它可以用于增强循环。
值得注意的是,当我们说“只能包含指定类型的对象的列表”时,我们应该说“应该”而不是“可以”。除非你通过Class<?>
周围的对象,Java(运行时)不会检查传入的值实际上是否符合,只有编译器会检查,并且仅基于可见的静态类型,该类型可能已被手动更改(这会发出警告)。
关于问题:
- 它代表
BinaryTree
包含Comparable
的对象与T
同一类的任何对象或其任何父类(super class)型(Object
是所有类的一个父类(super class)型,基本上是T
扩展的所有类及其实现的所有接口(interface))。 - 如果您想使用
writeObject
序列化对象,那么该对象的所有非 transient (即不能基于其他数据重建)实例字段需要为Serializable
也可以,或者writeObject
will ignore them 。您的代码摘录不足以判断Node
是否需要是Serializable
或不,但它可能需要给出List
的总体思路示例。
关于Java 泛型、链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10852542/