2

は、 のインスタンスなしでメンバーにアクセスする必要static classがあることを学びました。classclass

からの以下のコードでjava.util.HashMapjdk 1.8

public class HashMap<K,V> extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable {

        .........

        static class Node<K,V> implements Map.Entry<K,V> {
             final int hash;
             final K key;
             V value;
             Node<K,V> next;

             Node(int hash, K key, V value, Node<K,V> next) {
                this.hash = hash;
                this.key = key;
                this.value = value;
                this.next = next;
             }
             ........
         }
         ..........
}

コンストラクタを呼び出すJava構文は何ですか

Node(int hash, K key, V value, Node<K,V> next){...}

ネストされたstatic class Node?

4

3 に答える 3

2

静的クラスは、クラスのインスタンスなしでメンバーにアクセスする必要があるクラスであることを学びました。

より正確には、ネストされた静的クラスは、そのインスタンスが外側のクラスのインスタンスへの参照なしでインスタンス化されるクラスです。

入れ子になった静的クラスは、(そのメソッドとフィールドと共に) 囲んでいるクラスのメンバーと見なされます。ただし、あらゆる点で、入れ子になった静的クラスは最上位クラスと同じように機能します。

ネストされた静的クラスのインスタンスを作成するには、次の構文を使用します。

EnclosingClass.MemberClass myInstance = new EnclosingClass.MemberClass();
于 2015-09-03T04:43:56.867 に答える
2

その静的内部クラスを「見る」ことはできないと思います。これはパッケージで保護されており、一般的に、人々が自分のものを java.* パッケージにジャックしようとしているのを目にすることはありません。

これはコンパイルされますが、yuk. この方法で java.* パッケージをハイジャックできるとは知りませんでした。

package java.util

import java.util.HashMap;
import java.util.Map;

public class InstantiateNode {

  public static void main(String[] args) {
    HashMap.Node<String,String> mapNode = new HashMap.Node<String, String>(1, "hey", "you", null);
  }
}
于 2015-09-03T04:45:46.350 に答える
1

なし、そのためのシンタックスはありません。

ノードにはパッケージ アクセスがあります。これは、HashMap が属するパッケージの外部のコードからアクセスできないことを意味します。

まれに、そのパッケージ内でコードを記述している場合、シンタックスは次のようになります。

HashMap.Node<KeyType, ValueType> node = 
   new HashMap.Node<>(hash, key, value, nextNode );
于 2015-09-03T04:46:36.837 に答える