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クラスパスのソースコードコメントで見つけました。これはプロジェクトであり、私は次のように引用しています。

(GNU Classpath、Essential Libraries for Java)は、Javaプログラミング言語用の仮想マシンおよびコンパイラで使用するための無料のコアクラスライブラリを作成するためのGNUプロジェクトです。

Modifierクラスのソースコードには、コンストラクターに関する次の非javadocコメントがあります。

このコンストラクターは実際にはここにあるべきではありません...このクラスのインスタンスメソッドまたは変数はないため、インスタンス化は無意味です。ただし、この関数は1.1仕様に含まれているため、完全を期すために追加されています。

これが完全に正確であるかどうかはわかりません。Java1.3.1仕様にしかアクセスできず、そのリフレクションモデルの部分で読み取ることができるのは(太字の私のもの)です。

Modifierクラスは、クラスメソッドをエクスポートしてクラスとメンバーのJava言語修飾子をデコードするインスタンス化できないクラスです。言語修飾子は整数でエンコードされ、Java仮想マシン仕様で定義されたエンコード定数を使用します。

ソースコードからのコメントを信じたいのですが、そのようなことが言われている仕様を実際に指摘することはできません。私にとってさらに奇妙なのは、仕様1.3からの前の引用でさえ、それがインスタンス化できないとすでに述べていることです。

于 2013-03-08T21:27:38.487 に答える
0

javadocデフォルトオプションで使用されたdefault constructor場合、そのクラスにパラメータなしのコンストラクタが定義されておらず、パラメータを持つ他のコンストラクタがない場合にドキュメントで提供されるのは、のプロパティである可能性があります。

于 2013-03-08T21:25:27.070 に答える
0

これは間違いなくjavadocのエラーではありません。このようなコンストラクターが見つからないということは、java.lang.reflect.Modifierがパブリッククラスであるため、これがデフォルトのコンストラクター(argコンストラクターなし)であり、デフォルトでパブリックであることを意味します。

于 2013-03-08T21:13:51.480 に答える
0

良い発見です。これはAPIデザイナーの見落としです。

ただし、ユーティリティクラスをインスタンス化することは大したことではないことも証明しています。new Modifier()誰にも問題を引き起こしたことはありません。どちらもしませんnew Math()

チキンを少し聞かないでください。

于 2013-03-08T21:45:00.233 に答える