2

我了解到这static class是 a必须在没有 a 的实例的情况下访问class其成员。class

在下面的代码中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 所属包之外的代码访问。

在不太可能的情况下,您正在该包中编写代码,sintax 将是:

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