61

Javaチュートリアルから:

最後に、クラス リテラルと呼ばれる特別な種類のリテラルもあり、型名を取り、" .class" を追加して形成されます。たとえば、String.class. Classこれは、型自体を表す(型の) オブジェクトを参照します。

このリテラルはどの型の変数に代入できますか?

可能であれば、小さな例を挙げてください。

4

10 に答える 10

51
Class<String> c = String.class;

Javadoc をjava.lang.Classチェックして、これらの小さな男の 1 つで何ができるかを確認してください。主にリフレクションに関連しています。

于 2010-01-29T08:47:17.490 に答える
42

それを理解するには、 StringがクラスClassのインスタンス (オブジェクト) であることを理解する必要があります。文字列リテラル (例: "I am a string.") はクラスStringのインスタンス (オブジェクト) を表す表記法ですが、クラス リテラル (例: Hashtable.class) はクラスClassのインスタンスを表す表記法です。

于 2010-01-29T09:00:54.807 に答える
25

ここにある他の良い回答のおかげで、それが何であるかはわかりますが、これも明確になる典型的な使用例です。

    private static Logger log = Logger.getLogger(YourClassHere.class);

コードが示すように、これはロギング フレームワークを初期化する行です (この例では、org.apache.log4jパッケージを使用していますが、原則は他のフレームワークにも適用されます)。このgetLogger()メソッドにはクラス リテラルが必要なので、何をログに記録しているか (つまり、現在のオブジェクトのクラス) がわかります。

于 2010-01-29T09:05:32.940 に答える
15

Java言語仕様(JLS)によると:

15.8.2クラスリテラル

クラスリテラルは、クラス、インターフェイス、配列、またはプリミティブ型の名前と、それに続くa.およびトークンで構成される式classです。クラスリテラルの型はですClassvoidこれは、現在のインスタンスのクラスの定義クラスローダーによって定義された名前付きタイプ(または)のClassオブジェクトに評価されます。

于 2010-01-29T09:26:06.583 に答える
6

いくつかの一般的な使用法は、ランタイム タイプ トークンとしてのクラス リテラルに見られる場合があります。このアプローチは、ここで説明するに見られるように、オブザーバー パターンを実装するために広く使用されています。アプリケーションには、例が含まれています。EventListenerListConverterConverterRangeModel

于 2010-01-29T12:35:35.880 に答える
5

リテラル自体はMyClassです。書くMyClass.classと、クラスオブジェクトへの参照が得られます。を書くnew MyClass()と、リテラルを使用して、によって取得したクラスオブジェクトのインスタンスを取得しMyClass.classます。インスタンスから、を呼び出すことで同じクラスオブジェクトを取得しますmyClassInstance.getClass()

100%確信はありませんが、リテラル自体を変数に割り当てることはできません。できることは、クラスの名前を文字列として取得し、リフレクションフレームワークを使用してインスタンスを作成することです。

于 2010-01-29T09:20:16.753 に答える
3

例では、次のようなものです。

Class myClass = MyClass.class

また

MyClass.class.getResourceAsStream("config.properties");
于 2010-01-29T08:47:59.977 に答える
1

JVM がアプリケーション クラスをロードするとき、それらをjava.class.Classオブジェクトとして保存します。

Classそのため、通常、クラスを表す型のインスタンスがメモリ内にいくつか存在します。したがって、次のようなことができます。

Class<Bicycle> bicycleClass = Bicycle.class; // returns the object storing your Bicycle class
bicycleClass.getName();  // returns your class name
bicycleClass.getDeclaredMethods();  // returns your (declared) class methods
于 2016-10-13T20:03:23.987 に答える
1

それを理解するにStringは、それが のinstance (object)であることを理解する必要がありますsuperclass (parent class) Object

class Stringinstance (object)値はString literal(eg "I am a string.") です:

class   |  instance (object) |  literal
------------------------------------------------
String  |  instance_name  =  |  "I am a string."

一方、class Objectinstance (object)値はClass literal— (例: Hashtable.class) であり、これは を参照しclass Hashtableます。instance (object)

class      |  instance (object) |  literal
------------------------------------------------
Hashtable  |  instance_name     |  Hashtable.
于 2015-03-11T21:54:10.120 に答える