簡體   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