簡體   English   中英

在 java 中創建名稱為 class 的變量作為數據類型

[英]Creating an variable with the class name as the data type in java

我正在瀏覽互聯網上的鏈表操作代碼,我發現以下代碼片段我無法理解。

class Node 
{
    int data;
    Node node; //reference to the next node
    :
    :
}

我已經了解了Node node; line 是對下一個節點的引用,因為鏈表的節點包含下一個節點的數據和地址。

但我無法理解它背后的概念。

如果使用 class 名稱作為數據類型定義變量,任何人都可以解釋什么是 java 概念/理論?

如果使用 class 名稱作為數據類型定義變量,任何人都可以解釋什么是 java 概念/理論?

沒有這樣的概念或理論。

從 Java 語言的角度來看,變量名稱可以是任何名稱,只要它符合所需的語法即可。

從 Java 風格的角度來看,變量名稱應該向讀者傳達含義。 但是由代碼的作者決定如何傳達含義以及需要(明確地)傳達什么/多少含義。

在這種情況下,作者決定他們將簡單地使用node作為變量名。 除了顯而易見的之外,這沒有任何意義:它是一個“節點”。 此變量的實際預期含義由注釋傳達:

//reference to the next node

但是您可能可以通過閱讀Node class 中的代碼的 rest 和/或使用 class 的代碼來弄清楚這一點。

對於我們的價值,我可能會調用變量next而不是node 但我可能不會在代碼審查中指出作者的選擇不正確。


作為一般性陳述,對於變量名應該傳達什么和多少含義存在不同的意見。 但是沒有普遍接受的規則。 所以你需要准備好閱讀代碼而不是依賴變量名。

如果代碼很復雜,或者您正在嘗試了解一種新的(對您而言)數據結構,這可能會成為一個問題。 但在后一種情況下,解決方案可能是找到更好的代碼來學習。

例如,任何關於數據結構的好教科書都會有鏈表的示例代碼。 代碼應該寫得更好,並且應該有附帶的文字來解釋它。 如果您不想購買/借用教科書,您可能可以在互聯網上找到更好的示例代碼來學習。

如果使用 class 名稱作為數據類型定義變量,任何人都可以解釋什么是 java 概念/理論?

如果我正確理解您的問題,您會因為聲明一個與它所在的 class 相同類型的變量而感到困惑,對嗎? class Node具有自身實例作為可變Node node的事實?

好吧,這里沒有“理論或概念”。 class 可以定義任何已知類型的變量。 class Node被定義為已知類型。 因此它可以聲明該類型的變量,甚至在它自己內部。

這主要用於具有某種嵌套結構的數據結構。 您已經給出了一個示例,一個引用下一個Node的節點。

你也可以有一個雙向鏈表:

class Node {
   Node previous;
   Node next;
}

你可以有一個Directory class 代表一個文件夾結構:

class Directory {
   Directory[] subDirectories;
   File[] files;
}

或者一個JSONObject class ,它包含一個嵌套JSONObject的鍵/值對

class JSONObject {
    Map<String, JSONObject> children;
}

等等等等。

鏈表

//Node holds reference to Node
class Node{
    Node link;
    int info;
    public Node(){
    }
    public Node(int info){
        this.info=info;
    }
    public String toString(){
        return Integer.toString(info);
    }

}
class Linked{
    Node head;//head reference denoted the beginning of the linkedlist
    private int size=0;
    public void add(int info){
        if (size==0){
            head=new Node(info);
        }else{
            Node temp=head;
            while(temp.link!=null){
                temp=temp.link;
            }
            temp.link=new Node(info);
        }
        size++;
    }
    public String toString(){
        String str="";
        var temp=head;
        while(temp!=null){
            str+=temp.info+" ";
            temp=temp.link;
        }
        return str;
    }
    public static void main(String ... $){
        Linked link=new Linked();
        link.add(10);
        link.add(555);
        link.add(55);
        var out=System.out;
        out.println(link);
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM