【问题标题】:How do you declare a Node type from outside the LinkedList class in Java?如何从 Java 中的 LinkedList 类外部声明 Node 类型?
【发布时间】:2015-11-29 05:35:14
【问题描述】:

如何声明 Node 类型的变量? Node 是 LinkedList 的一个内部类,在我正在编写的程序的 main 方法中,我想创建一个 Node 变量。但在下面代码 sn-p 的最后一行中,我收到错误消息“Nose 在 LinkedList 中具有私有访问权限”。为什么我不能使用 Node 类型?

import java.util.LinkedList;

public class MinSplit {
    public static long leastAmount;

public static void main(String args[]) {
    LinkedList list = new LinkedList();
    LinkedList.Node node = new LinkedList.Node();

【问题讨论】:

  • 在 Java 中我们使用泛型来定义节点的类型..

标签: java linked-list


【解决方案1】:

为什么我不能使用Node 类型?

因为它被声明为private。它是LinkedList 类的内部实现细节,您应该没有理由创建实例。显然,这是 Java 团队经过深思熟虑的设计决定,旨在保持 API 清洁并避免人们破坏列表数据结构而导致的问题。

如果您想实例化Node 类以便可以对LinkedList 执行某种操作,请三思。没有一个公共 API 以允许您将 Node 添加到 LinkedList ... 或以任何其他方式使用它的方式公开 Node 类型。您可能需要从头开始实现自己的链表类。

如果您希望 Node 类用于其他目的,您应该声明一个新类或在第三方库中找到合适的类。


实际上,如果你准备好了,你可以使用反射来破坏类型抽象。可以实例化private 类,调用private 方法并访问/更新private 字段。但这是一个非常糟糕的主意。首先,如果 Oracle 决定修改该类,您的反射技巧很可能会被破坏。

【讨论】:

    【解决方案2】:

    NodeLinkedList 类内部使用的类,用于存储LinkedList 中每个节点的值,并被定义为私有类,因此您不能从类外部引用它。

    为了在 Java 中为 LinkedList 等类定义节点类型,我们使用泛型。你可以像下面这样定义你的变量

    LinkedList<String> varName = new LinkedList<>();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多