私の質問は、実行時にクラス情報がどのように読み込まれるかです。
誰かが電話instanceof
をかけたとき、それは RTTI またはリフレクションと見なされますか? それとも実際の状況に依存しますか?
私の質問は、実行時にクラス情報がどのように読み込まれるかです。
誰かが電話instanceof
をかけたとき、それは RTTI またはリフレクションと見なされますか? それとも実際の状況に依存しますか?
「RTTI」という用語は、プログラムが実行時にさまざまなオブジェクトの動的な型を決定できるようにするコア言語の機能を指す C++ 固有の用語です。通常、dynamic_cast
またはtypeid
演算子と、std::type_info
によって生成される関連オブジェクトを参照しtypeid
ます。
一方、リフレクションという用語は、プログラミング言語全体で使用される一般的な用語であり、実行時にオブジェクトや型などを検査および変更するプログラムの機能を指します。
プログラムが実行中の型を調べて、実行する一連のアクションを決定することが許可されているため、適用されると聞いた用語instanceof
は型のイントロスペクションであり、オブジェクトのイントロスペクションとinstanceof
呼ばれることもあります。これはリフレクションよりも弱い用語だと思います。なぜなら、オブジェクトのフィールドやメソッドに関する精巧なイントロスペクションが許可されていないからです。しかし、演算子リフレクションの使用を呼ぶのが技術的に間違っているとは思いません。instanceof
あなたの他の質問について - クラス情報は実行時にどのようにロードされますか? - それは実際には JVM の実装次第です。型は最終的にクラスをシステムにロードする責任がありますClassLoader
が、JVM はこれを必要に応じて解釈できます。私はかつて JavaScript で JVM のプロトタイプを作成しましたが、内部的にはすべてのリフレクション呼び出しが、クラス、フィールド、およびメソッドを表すために配置された基盤となる JS データ構造を照会するだけでした。HotSpot JVM はまったく別のことをしていると思いますが、ほとんど実装定義です。
お役に立てれば!