繁体   English   中英

了解Java中的泛型

[英]Understanding generics in Java

有人可以告诉我这段代码在做什么,我是java的新手。

Queue <TreeNode> queue = new LinkedList<TreeNode>();

我相信这段代码会使用TreeNode类型的变量名称queue创建一个Queue,这是什么意思? 是否将Queue分配为TreeNode类型的链表?

java.util.Queue使用类型参数来确保您不会添加创建时所使用的类型。

如果您像这样创建Queue

Queue <TreeNode> queue = new LinkedList<TreeNode>();

这意味着queue只能存储TreeNode对象。 这用于方法add,offer,remove,poll类型检查。

泛型允许您指定DataStructure将存储什么类型的引用。 在您的示例中,列表将为TreeNode类型的变量。

但是您可以存储任何类型,包括您自己的用户定义类型,例如类。

下面的链接描述了Java中的泛型以及使用它们的原因。

https://docs.oracle.com/javase/tutorial/java/generics/why.html

通过使用泛型,我们可以确保对象的类型安全。

在你的问题

Queue <TreeNode> queue = new LinkedList<TreeNode>();

您已经创建了具有通用类型“ TreeNode”的队列。 因此,它将仅允许使用instanceOf“ TreeNode”类的对象。

是的,要理解这一点,您必须至少对Java中的泛型有所了解。 泛型是Java的非常重要的功能,Java收集框架以完整形式使用此功能。 让我描述一下您的声明。

Queue <TreeNode> queue = new LinkedList<TreeNode>();

这里首先要注意的是,几乎所有集合类和接口本质上都是通用的。 这意味着他们可以在其中存储任何类型的数据。 请参见以下示例。

List list = new ArrayList();

    String sObj = "stringObj";
    Integer iObj = 1;
    MainTest classObj = new MainTest();

    list.add(sObj); //Storing string 
    list.add(iObj); // Stroing int 
    list.add(classObj); //Storing class object

在这里您可以看到我创建了一个ArrayList并通过List引用变量对其进行了引用。 在这里您可以注意到,我这里没有提及任何类,因此默认情况下它将存储所有对象类型的对象。 现在,如果我们来看您的代码,这意味着您将集合限制为仅存储一种类型的对象,即TreeaNode,以便将任何其他类型的对象添加到此集合中。 在左侧的语句中,您正在创建一个名称为queue的引用变量,其数据类型为TreeNode的Queue,而在右侧,您分配了一个LinkedList对象,该对象只能将TreeNode对象int存储到您的队列引用变量中。将不允许在其中添加除TreeNode之外的任何对象。 Queue和LinkedList类都可以实现Collection接口,从而可以进行此分配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM