[英]Mocking java.lang.reflect.Modifier methods with mockito
[英]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.