用于调用静态嵌套类的构造函数的Java语法

时间:2015-09-03 04:39:20

标签: java inner-classes static-class

我了解到static classclass,其成员必须可以在没有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

3 个答案:

答案 0 :(得分:2)

  

我了解到静态类是一个必须访问其成员的类   没有类的实例。

更准确地说,静态嵌套类是实例 实例化的类,而不引用封闭类的实例。< / p>

静态嵌套类被视为封闭类的成员(及其方法和字段)。但是,在每一个重要的方面,静态嵌套类的功能就像顶级类一样。

要创建静态嵌套类的实例,请使用以下语法:

EnclosingClass.MemberClass myInstance = new EnclosingClass.MemberClass();

答案 1 :(得分:2)

我认为你不能&#34;看到&#34;那静态的内在阶级;它是受包保护的,你通常不会看到有人试图将他们的东西插入任何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);
  }
}

答案 2 :(得分:1)

没有,没有sintax。

Node具有包访问权限。这意味着您无法从HashMap所属的包之外的代码访问。

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

HashMap.Node<KeyType, ValueType> node = 
   new HashMap.Node<>(hash, key, value, nextNode );