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

时间:2013-03-08 20:58:32

标签: java reflection

我正在学习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.
}

4 个答案:

答案 0 :(得分:1)

构造函数存在且存在于javadoc中,但不存在任何信息。 我在GNU classpath的源代码注释中找到了一些关于它的信息,这个项目是我引用的:

  

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

在他们的source code for the Modifier class中,你可以找到构造函数的以下非javadoc注释:

  

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

我不知道这是否完全准确,因为我只能访问Java 1.3.1规范,而reflection model part中你可以读到的是(粗体的我的):

  

Modifier类是一个不可实例化的类,它导出类方法以解码类和成员的Java语言修饰符。语言修饰符以整数编码,并使用Java虚拟机规范定义的编码常量。

我确实想要相信来自源代码的评论,但我不能真正指出你所说的那样的规范。对我来说更奇怪的是,之前的引用甚至来自规范1.3已经说明了这是不可解决的。

答案 1 :(得分:0)

这绝对不是javadoc中的错误。你找不到这样的构造函数意味着这是一个默认的构造函数(没有arg构造函数),默认是公共的,因为java.lang.reflect.Modifier是一个公共类。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

很好的发现,这是对API设计师的疏忽。

但是,它也证明了实例化实用程序类并不是什么大不了的事。 new Modifier()从未对任何人造成任何问题。 new Math()也不会。

不要小听鸡肉。