Java泛型,链表

Java泛型,链表,java,generics,serialization,singly-linked-list,Java,Generics,Serialization,Singly Linked List,我学完了泛型,我觉得这并不容易。然而,我确实明白了。这就是我所理解的。我希望你纠正我的错误并回答几个问题:) 公共类链接列表{ //类定义 } 这意味着LinkedList是一个接受类的对象和接口的类 public class LinkedList<T extends Object> { //class definition } 公共类链接列表{ //类定义 } 这意味着LinkedList是一个只接受扩展对象类的类的对象的类。基本上,所有的班级。如果是原始类型,T将被Obje

我学完了泛型,我觉得这并不容易。然而,我确实明白了。这就是我所理解的。我希望你纠正我的错误并回答几个问题:)

公共类链接列表{
//类定义
}
  • 这意味着LinkedList是一个接受类的对象和接口的类

    public class LinkedList<T extends Object> {
    //class definition
    }
    
    公共类链接列表{
    //类定义
    }
    
  • 这意味着LinkedList是一个只接受扩展对象类的类的对象的类。基本上,所有的班级。如果是原始类型,T将被Object替换
  • public class LinkedList<T extends Object & java.lang.Serializable> {
    //class definition
    }  
    
    公共类链接列表{
    //类定义
    }  
    
  • 这意味着LinkedList是一个类,它接受所有实现可序列化接口的类的对象。如果必须将用户定义类的对象包括在列表中,则用户定义类必须实现可序列化。
  • public class LinkedList<T> implements Iterable<T> {
    //class definition
    }  
    
    公共类LinkedList实现了Iterable{
    //类定义
    }  
    
  • 这意味着LinkedList类可以与基于集合的for循环一起使用。它必须重载迭代器()方法,并且应该有一个实现
    Itarator
    的内部类,并重载hasNext()、next()和remove()

  • 问题
    1.如有可能,请用简单的文字和示例解释此内容的含义:

    public class
    BinaryTree关于您的前四点:

  • 应该包含
    T
    实例的列表(包括扩展
    T
    的类)
  • 实际上与第一个相同,因为所有类都扩展了
    Object
  • 只能包含可序列化对象的列表(与
    类链接列表{…}
    相同)
  • 一个可编辑的
    T
    列表,因此可以在增强循环中使用
  • 值得注意的是,当我们说“只能包含指定类型的对象的列表”时,我们应该说“应该”,而不是“可以”。除非您传递
    对象,否则Java(运行时)不会检查传入的值是否实际符合,只有编译器会检查,并且仅基于可视静态类型,该类型可能已被手动更改(这将发出警告)

    关于问题:

  • 它表示一个
    BinaryTree
    ,其中包含与
    T
    相同类的任何对象或其任何超类型(
    object
    是所有类的一个超类型,本质上是
    T
    扩展的所有类及其实现的所有接口)具有可比性的
    对象
  • 如果要使用
    writeObject
    序列化对象,则该对象的所有非瞬态(即无法基于其他数据重建)实例字段也需要是
    可序列化的
    ,或者。您的代码提取不足以判断
    节点是否需要
    可序列化
    ,但它可能需要给出
    列表
    示例的总体思路

  • 根据Oracle指南:

    注意-由于几个原因,强烈建议不要序列化内部类(即非静态成员类的嵌套类),包括本地类和匿名类。由于在非静态上下文中声明的内部类包含对封闭类实例的隐式非瞬态引用,因此序列化此类内部类实例也将导致其关联的外部类实例的序列化。javac(或其他JavaTM编译器)生成的用于实现内部类的合成字段依赖于实现,并且可能因编译器而异;这些字段中的差异可能会破坏兼容性,并导致默认serialVersionUID值发生冲突。分配给本地和匿名内部类的名称也依赖于实现,并且在编译器之间可能有所不同。由于内部类不能声明编译时常量字段以外的静态成员,因此它们不能使用serialPersistentFields机制来指定可序列化字段。最后,由于与外部实例关联的内部类没有零参数构造函数(此类内部类的构造函数隐式接受封闭实例作为前置参数),因此它们无法实现Externalizable。但是,上面列出的问题都不适用于静态成员类


    添加一些澄清:

    T
    代表任何参考类型;它可以是类、接口或数组,也可以是参数化类型。类和接口等之间没有区别

    T扩展对象
    T
    相同,因为每个引用类型都是
    对象
    的子类型(是的,接口也是
    对象
    的子类型)<代码>扩展对象
    有点多余


    T扩展对象&可序列化
    要求
    T
    既是
    对象
    又是
    可序列化
    的子类型。正如我们之前所说的,所有的东西都是<代码>对象< /代码>的子类型,现在您可以认为它与 T扩展了可序列化的< /C>(这略有不同,因为在第一种情况下,
    T
    的擦除将是
    对象
    ,在第二种情况下,
    可序列化
    ;但此时您无需担心这一点).

    @FasihKhatib指示
    链接列表
    是否具有类型为
    节点
    的非静态字段。我计划添加一个非静态方法
    public void writeIt()
    ,该方法将创建一个
    ObjectOutputStream
    ,然后使用
    writeObject(此)
    是,它将具有非静态的
    节点开始
    指向列表的开始,
    节点结束
    指向列表的结束。
    节点当前
    指向当前节点。Th
    public class LinkedList<T> implements Iterable<T> {
    //class definition
    }  
    
    public class LinkedList<T extends Object> implements Serializable {
         //methods and data members      
    private class Node implements Serializable { //inner class
                      T object;
                      Node next;
               }
        }