如何声明Node类型的变量?Node是LinkedList的内部类,在我编写的程序的主要方法中,我想创建一个Node变量。但在下面代码片段的最后一行,我得到了错误消息"Nose在LinkedList中具有私有访问权限"。为什么我不能使用节点类型?
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();
为什么我不能使用
Node
类型?
因为它被声明为private
。它是LinkedList
类的内部实现细节,您应该没有理由创建实例。很明显,这是Java团队深思熟虑的设计决定,目的是保持API的清洁,避免人们破坏列表数据结构所造成的问题。
如果您想实例化Node
类,以便对LinkedList
执行某种操作,请三思。没有一个公共API以允许您将Node
添加到LinkedList
的方式公开Node
类型。。。或者以任何其他方式使用它。您可能需要实现自己的链表类。。。从头开始。
如果您希望Node
类用于其他目的,则应该声明一个新类或在第三方库中找到合适的类。
实际上,如果你准备好了让ri变得讨厌,那么就有可能使用反射来打破类型抽象。可以实例化private
类、调用private
方法和访问/更新private
字段。但这真是个坏主意。首先,如果Oracle决定修改类,那么您的反思性黑客很可能会崩溃
Node
是LinkedList
类内部使用的一个类,用于存储LinkedList
中每个节点的值,并且被定义为私有类,因此不能从类外部引用它。
为了在Java中为LinkedList之类的类定义Node类型,我们使用泛型。你可以定义你的变量如下
LinkedList<String> varName = new LinkedList<>();