繁体   English   中英

为什么java.lang.reflect.Modifier具有公共构造函数?

[英]Why does java.lang.reflect.Modifier have a public constructor?

我正在学习Java反射,并且很好奇要知道java.lang.reflect.Modifier对公共构造函数有什么用。 Java文档没有给出任何描述或使用,并且该类只有静态方法和常量。

编辑:添加了一些测试代码。

import java.lang.reflect.*;

  public class TestModifier {
        Modifier modifier = new Modifier(); // Compiles fine.
       // Math math = new Math(); // Won't compile.  Math() has private access.
}

尽管不存在任何信息,但构造函数存在并且存在于javadoc中 我在GNU classpath的源代码注释中找到了有关它的一些信息,并且引用了:

(GNU Classpath,Java的基本库)是一个GNU项目,用于创建免费的核心类库,以供Java编程语言的虚拟机和编译器使用。

在其针对Modifier类源代码中,您可以找到以下针对构造函数的非Javadoc注释:

这个构造函数实际上不应该在这里...没有此类的实例方法或变量,因此实例化毫无价值。 但是,此功能在1.1规范中,因此为了完整性起见添加了此功能。

我不知道这是否完全准确,因为我只能访问Java 1.3.1规范,在反射模型部分中,您可以读到的是(粗体的)

Modifier类是无法实例化的类,该类导出类方法以解码类和成员的Java语言修饰符。 语言修饰符以整数编码,并使用The Java Virtual Machine Specification定义的编码常数。

我确实想相信源代码中的注释,但是我无法真正指出要说这种话的规范。对我来说,甚至更奇怪的是,即使来自规范1.3的先前引用也已表明它是不可实例化的。

这绝对不是javadoc中的错误。 您找不到这样的构造函数意味着这是默认的构造函数(无arg构造函数),默认情况下它是公共的,因为java.lang.reflect.Modifier是公共类。

如果与default options一起使用,则它可能是javadoc的属性,如果未为该类定义无参数构造函数,并且没有其他带参数的default constructor ,则它将在文档中提供default constructor函数。

很好的发现,这是API设计人员的疏忽。

但是,这也证明了实例化一个实用程序类根本不是什么大问题。 new Modifier()从未引起任何问题。 new Math()也不会。

不要少听鸡。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM