Java 泛型、链表

标签 java generics serialization singly-linked-list

我学完了泛型,但我发现它并不容易。不过,我确实明白了。这是我的理解。我希望你纠正我的错误并回答几个问题:)。

public class LinkedList<T> {
//class definition
}

  • 这意味着 LinkedList<> 是一个接受类对象和接口(interface)的类。
  • public class LinkedList<T extends Object> {
    //class definition
    }
    

  • 这意味着 LinkedList<> 是一个接受扩展 Object 类的类的对象的类。基本上全类都有。如果是原始类型,T 将被替换为 Object
  • public class LinkedList<T extends Object & java.lang.Serializable> {
    //class definition
    }  
    

  • 这意味着 LinkedList<> 是一个接受所有实现 Serialized 接口(interface)的类的对象的类。如果用户定义类的对象必须包含在列表中,则用户定义类必须实现可序列化。
  • public class LinkedList<T> implements Iterable<T> {
    //class definition
    }  
    

  • 这意味着 LinkedList<> 类可以与基于集合的 for 循环一起使用。它必须重载 iterator() 方法,并且应该有一个实现 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 吗?

    最佳答案

    关于您的前四点:

    1. 应该包含 T 实例的列表(包括扩展 T 的类)。
    2. 实际上与第一个相同,因为所有类都扩展 Object .
    3. 只能包含 Serializable 的对象的列表(与 class LinkedList<T extends Serializable> { ... } 相同)
    4. 可迭代列表 T ,所以是的,它可以用于增强循环。

    值得注意的是,当我们说“只能包含指定类型的对象的列表”时,我们应该说“应该”而不是“可以”。除非你通过Class<?>周围的对象,Java(运行时)不会检查传入的值实际上是否符合,只有编译器会检查,并且仅基于可见的静态类型,该类型可能已被手动更改(这会发出警告)。

    关于问题:

    1. 它代表 BinaryTree包含 Comparable 的对象与 T 同一类的任何对象或其任何父类(super class)型( Object 是所有类的一个父类(super class)型,基本上是 T 扩展的所有类及其实现的所有接口(interface))。
    2. 如果您想使用 writeObject 序列化对象,那么该对象的所有非 transient (即不能基于其他数据重建)实例字段需要为 Serializable也可以,或者 writeObject will ignore them 。您的代码摘录不足以判断 Node 是否需要是Serializable或不,但它可能需要给出 List 的总体思路示例。

    关于Java 泛型、链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10852542/

    相关文章:

    asp.net - 想在类上使用 XmlElement 属性?

    c#:使第 3 方对象可序列化

    c++ - 如何将此类序列化为 XML 或 JSON

    java - 从 Java Web 项目构建 WAR 和自可执行 JAR

    java - Maven Compile Plugin 找到依赖项,但 Maven Javadoc Plugin 没有找到

    java - JavaFX 中的拖放选项卡

    java - 如何通过Selenium Webdriver Java单击覆盖标记下的Webelement

    java - 为什么 List<String> 不能作为 List<Object> 接受?

    java - 我怎样才能避免这个 if 语句

    Java 在分层生成器模式中避免类转换警告