クラス クラス オブジェクトは、次の 3 つの方法で取得できます。
- MyClass.class
- obj.getClass
- Class.forName("クラス名")
MyClass.class
との違いがわかりませんClass.forName("className")
。
どちらもクラス名が必要になるためです。
クラス クラス オブジェクトは、次の 3 つの方法で取得できます。
MyClass.class
との違いがわかりませんClass.forName("className")
。
どちらもクラス名が必要になるためです。
Class.forName("className");
forNameは、クラス「Class」の静的メソッドです。目的のクラスの完全修飾名を指定する必要があります。これは、実行時にクラスの名前がわかるようになるときに使用できます。
ClassName.class;
.classはメソッドではなく、キーワードであり、intのようなプリミティブ型で使用できます。クラスの名前が事前にわかっていて、それがプロジェクトに追加された場合、そのときはClassName.classを使用します
MyClass.class
との違いがわかりませんClass.forName("className")
。どちらもクラス名が必要になるためです。
大きな違いは、いつ必要になるかです。stringClass.forName
を受け入れるため、実行時にクラス名を決定できます。もちろん、コンパイル時に決定されます。これは、構成に基づいてクラスを動的にロードする場合に役立ちます (たとえば、構成ファイルの設定に応じてデータベース ドライバをロードするなど)。MyClass.class
Class.forName
Rounding out:obj.getClass()
は、オブジェクトの実際のクラスがわからない可能性があるため便利ですfoo(Map m)
。のクラスはわかりませんが、m
それは を実装するものですMap
。(そして 99% の場合、そのクラスが何であるかを気にする必要はありませんが、その 1% が時折発生します。)
重要な違いの 1 つは、A.class がクラス A のロードとリンクを実行することです。Class.forName("A") がクラス A のロード、リンク、および初期化を実行します。
Class.forName("className");
完全修飾クラス名文字列に基づいてクラスを動的にロードします。
obj.getClass
オブジェクトのランタイム クラスを表す java.lang.Class オブジェクトを返します。
MyClass.class:
リテラルは、クラス、インターフェイス、配列、またはプリミティブ型のclass
名前、または疑似型 void の後にa
「.」が続く式です。そしてトークンクラス。の型 ( C.class
C はクラス、インターフェイス、または配列型の名前) は ですClass<C>
。