誰かが何かを言う前に、私は好奇心からこれを尋ねています。この回答に基づいて時期尚早の最適化を行う予定はありません。
私の質問は、リフレクションとキャストを使用する速度についてです。標準的なことわざは「反射が遅い」です。私の質問は、正確にどの部分が遅いのか、そしてその理由です。特に、何かが別のインスタンスの親であるかどうかを比較する場合。
オブジェクトのクラスを別の Class オブジェクトと比較するだけで、他の比較と同じくらい高速であると確信しています。おそらく、オブジェクトの状態に既に格納されているシングルトン オブジェクトを直接比較するだけです。しかし、あるクラスが他のクラスの親である場合はどうなるでしょうか?
私は通常、instanceof
通常のクラス チェックと同じくらい高速であると考えていますが、今日考えてみると、機能するためinstanceof
には「舞台裏」で何らかの反省が発生する必要があるようです。オンラインで調べたところ、誰かinstanceof
が遅いと言った場所がいくつか見つかりました。おそらく、オブジェクトの親を比較するために必要なリフレクションが原因でしょうか?
これは次の質問につながります。キャストだけではどうでしょうか。何かをオブジェクトとしてキャストした場合、それは得られませんClassCastException
。ただし、オブジェクトをそれ自体の親にキャストした場合、これは起こりません。基本的にinstanceof
、実行時にキャストを行うときに、呼び出しまたはその効果に対するロジックを実行していますか? オブジェクトのキャストが遅くなる可能性があることをほのめかす人を聞いたことがありません。確かに、すべてのキャストが提供されたオブジェクトの親に対して行われるわけではありませんが、多くのキャストは親クラスに対して行われます。しかし、これが遅くなる可能性があることを誰もほのめかしたことはありません。
それで、それはどれですか。本当にinstanceof
遅くないですか?親クラスへのキャストはどちらもinstanceof
遅いですか?instanceof
または、キャストが呼び出しよりも速く実行できる何らかの理由がありますか?