![](/img/trans.png)
[英]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.