Module jdk.dynalink

Class StaticClass

java.lang.Object
jdk.dynalink.beans.StaticClass
所有已实现的接口:
Serializable

public final class StaticClass extends Object implements Serializable
允许访问类的静态成员(静态方法、属性和字段),以及使用StandardOperation.NEW操作构造实例的对象。在Dynalink中,Class对象不被特殊对待,而是作为普通的Java对象;您可以使用例如GET:PROPERTY:superclass作为属性获取器来调用clazz.getSuperclass()。另一方面,您不能使用Class对象访问类的静态成员,也不能使用NEW创建类的新实例。这与Java中Class对象的行为一致:在Java中,您写例如new BitSet()而不是new BitSet.class()。同样,您写System.out而不是System.class.out。正是这个将类名用作构造函数和静态成员命名空间的方面,StaticClass体现了这一点。

此类的对象被BeansLinker识别为特殊对象,并对它们的操作将链接到所代表类的静态成员。此外,"class"合成属性也被识别,并返回JavaClass对象,就像在Java中System.class求值为System类的Class对象一样。相反,通过BeansLinker公开的Class对象公开"static"合成属性,该属性返回它们的StaticClass对象(在Java中没有相应的内容)。

总之,此类的实例充当静态成员的命名空间和类的构造函数,就像在Java语言中指定类名一样,只是在Java中这只是一个语法元素,而在Dynalink中它们被表达为实际对象。

表示Java数组类型的StaticClass对象将充当以单个int参数为参数的构造函数,并创建指定大小的数组。

如果类有多个构造函数,则StaticClass上的StandardOperation.NEW将尝试选择最具体的适用构造函数。您可能希望在您的语言中公开一种机制,通过BeansLinker.getConstructorMethod(Class, String)来选择具有显式签名的构造函数。

参见:
  • Method Details

    • forClass

      public static StaticClass forClass(Class<?> clazz)
      检索指定类的StaticClass实例。
      参数:
      clazz - 请求静态特性的类。
      返回:
      表示指定类的StaticClass实例。
    • getRepresentedClass

      public Class<?> getRepresentedClass()
      返回所代表的Java类。
      返回:
      表示的Java类。