「こんにちは、アミーゴ!」
「さあ、メインイベントの時間です。Class クラスについて学び、Reflection について触れます。おそらく
すでにお気づきかと思いますが、Java ではすべてがオブジェクトです。そして、オブジェクトには何が必要ですか? 各オブジェクトには何が定義されていますか?それは一体何ですか?」
「授業だ!」
「そうです! よくできました。各オブジェクトにはクラスがあります。しかし、オブジェクトに戻りましょう... エンティティを完全に含むオブジェクトもあれば、エンティティの管理を支援するだけのオブジェクトもあります。」
「後者のタイプには、 FileOutputStreamとThread が含まれます。 Threadオブジェクトを作成するとき、新しいスレッドは作成されません。スレッドは、 start() メソッドが呼び出された後に Java 仮想マシンによって作成されます。このオブジェクトは、プロセスの管理に役立つだけです。」
「 FileOutputStreamも同様です。ファイルはディスクに保存され、OS がストレージとアクセスを管理します。ただし、ここでも Java 仮想マシンの助けを借りて、File オブジェクトを通じてファイルと対話できます。」
「はい、それはもう分かりました。」
「つまり、クラスと対話するための Class という特別なクラスがあります。」
「それを推測するのは難しくありませんでした。」
「はい。Java 仮想マシンは新しいクラスをメモリにロードするたびに、Class オブジェクトを作成します。これを使用して、ロードされたクラスに関する特定の情報を取得できます。」
「各クラスとオブジェクトは、«クラス オブジェクト» に関連付けられます。」
例 | 説明 |
---|---|
|
Integer クラスの Class オブジェクトを取得します。 |
|
int クラスの Class オブジェクトを取得します。 |
|
String オブジェクトの Class オブジェクトを取得します。 |
|
Object オブジェクトの Class オブジェクトを取得します。 |
「うわー!面白い!」
「クラスという単語は Java のキーワードであり、変数名として使用できないことを覚えていますか?」
「ああ、そうだ、わかった、わかった。忘れていただけだ」
「Class オブジェクトをどこかですでに使用しましたか?」
「はい、equals メソッドの独自の実装を作成するときにこれを使用しました。」
「はい、getClass() メソッドを使用して、オブジェクトが同じクラスを持つかどうかをテストできます。」
「で、この物体で何ができるの?」
「そうですね、いろいろありますね。」
Javaコード | 説明 |
---|---|
|
クラス名を取得します。 |
|
名前でクラスを取得します。 |
|
オブジェクトのクラスを比較します。 |
「面白いけど、思ったほどクールではなかった。」
「クールにしたいですか? Reflectionもあります。Reflection は超クールです。」
「リフレクションって何?」
"リフレクションは、クラス自体に関する情報を取得するクラスの機能です。 Java には、 クラスの Classクラスに似た、FieldおよびMethodという特別なクラスがあります。 Classオブジェクトでクラスに関する情報を取得できるのと同じように、 Field オブジェクトはフィールドに関する情報を提供します。そして、Method オブジェクトはメソッドに関する情報を提供します。そして、それらを使って何ができるか見てみましょう:"
Javaコード | 説明 |
---|---|
|
List クラスのインターフェイスの Class オブジェクトのリストを取得します。 |
|
Stringクラスの親クラスのClassオブジェクトを取得します。 |
|
List クラスのメソッドのリストを取得します。 |
|
新しい文字列を作成します |
|
String クラスの長さメソッドを取得し、 String でそれを呼び出します。 |
「うわー!すごいですね!」
GO TO FULL VERSION