![](/img/trans.png)
[英]How do you declare a LinkedList with objects that implement a specific interface?
[英]How do you declare a Node type from outside the LinkedList class in Java?
如何聲明Node類型的變量? Node是LinkedList的內部類,在我正在編寫的程序的主要方法中,我想創建一個Node變量。 但是在下面的代碼片段的最后一行中,我得到了錯誤消息“ 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();
為什么不能使用
Node
類型?
因為它被聲明為private
。 它是LinkedList
類的內部實現細節,您沒有理由創建實例。 顯然,這是Java團隊的故意設計決定,目的是保持API清潔並避免由於人們破壞列表數據結構而導致的問題。
如果要實例化Node
類,以便可以在LinkedList
上執行某種操作,請再考慮一下。 沒有一個公共API公開Node
類型的方式允許您將Node
添加到LinkedList
...或以其他任何方式使用它。 您可能需要從頭開始實現自己的鏈接列表類。
如果要讓Node
類用於其他目的,則應聲明一個新類或在第3方庫中找到合適的類。
實際上,如果您准備好討厭,可以使用反射來破壞類型抽象。 可以實例化private
類,調用private
方法以及訪問/更新private
字段。 但這是一個非常糟糕的主意。 首先,如果Oracle決定修改該類,那么您的反思性黑客很容易被破壞。
Node
是一個類, LinkedList
類在內部使用該類將每個節點的值存儲在LinkedList
並且被定義為私有類,因此您不能從類外部引用它。
為了為Java中的LinkedList之類的類定義Node類型,我們使用泛型。 您可以如下定義變量
LinkedList<String> varName = new LinkedList<>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.