1

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

4 回答 4

1

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

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

在他们的 Modifier 类的源代码中,您可以找到构造函数的以下非 javadoc 注释:

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

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

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

我确实想相信源代码中的评论,但我不能真正指出你所说的规范。对我来说更奇怪的是,前面的引用甚至来自规范 1.3 已经表明它是不可实例化的。

于 2013-03-08T21:27:38.487 回答
0

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

但是,它也证明了实例化一个实用程序类根本不是什么大不了的事;new Modifier()从来没有给任何人带来任何问题。也不会new Math()

不要听小鸡的话。

于 2013-03-08T21:45:00.233 回答
0

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

于 2013-03-08T21:25:27.070 回答
0

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

于 2013-03-08T21:13:51.480 回答