0

HashMap の entryset が、直接書き込むのではなく entryset0 を呼び出す理由

Set <Map.Entry <K, V >> es = entrySet; 
! return es = null es: (entrySet = new EntrySet ());

writeObject メソッドで直接 entrySet0 を呼び出しているのは、entrySet メソッドをオーバーライドできるという理由によるものですか?

4

1 に答える 1

0

あなたの説明はもっともらしいです。entrySet()これは、誰かがサブタイプのメソッドをオーバーライドした影響から HashMap の実装を隔離するためです。

私が考えることができる唯一の他の説明は、これがクラスの古いバージョンから残っているということであり、Java 開発者がここでそれを起こさせるとは思わなかったでしょう。(これはコードに多くの目玉があります...)

いずれにせよ、おそらくパフォーマンスに違いはありません。JITコンパイラは呼び出しをインライン化する可能性があります...オーバーライドするサブクラスがある場合を除きます。HashMapentrySet()

于 2014-08-16T03:24:05.960 に答える