問題タブ [effective-java]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Joshua Bloch が効果的な Java で提案したように、Java でハッシュコードをキャッシュする方法は?
Joshua Bloch による効果的な Java の次のコードがあります (項目 9、第 3 章、49 ページ)。
クラスが不変で、ハッシュ コードの計算コストが大きい場合は、要求されるたびに再計算するのではなく、オブジェクトにハッシュ コードをキャッシュすることを検討してください。このタイプのほとんどのオブジェクトがハッシュ キーとして使用されると思われる場合は、インスタンスの作成時にハッシュ コードを計算する必要があります。それ以外の場合は、最初に hashCode が呼び出されたときに遅延初期化することを選択できます (項目 71)。PhoneNumber クラスがこの処理に値するかどうかは明らかではありませんが、それがどのように行われるかを示すだけです:
私の質問は、キャッシング (hashCode を記憶) がここでどのように機能するかです。初めてhashCode()
メソッドが呼び出されたとき、hashCode
それを結果に割り当てる必要はありません。このキャッシングがどのように機能するかについての簡単な説明は素晴らしいでしょう。ありがとう
java - 有効な Java ブックで read resolve メソッドを適切に宣言するとはどういう意味ですか?
効果的な Java のシリアライゼーションの章から:
逆シリアル化されるオブジェクトのクラスが適切な宣言で readResolve メソッドを定義する場合、このメソッドは、逆シリアル化された後に新しく作成されたオブジェクトで呼び出されます。
有効な Java で提供されている例は次のとおりです。Javadocが正しい形式であると言ってthrows
いる部分が欠落しているようです。ANY-ACCESS-MODIFIER Object readResolve() throws ObjectStreamException;
ここでの適切な宣言とはどういう意味ですか? 宣言が適切でない場合でも、クラスはコンパイルされますか? 私はその文が少し混乱していると感じています。
java - インスタンス変数の検証
効果的な Java を読むと、メソッド パラメーターを有効な方法として検証し、パブリック メソッドに対して例外をスローし、プライベート メソッドに対してアサートする必要があることが言及されています。しかし、インスタンス変数に対して何らかの対策を講じる必要がありますか。
EG: (ユースケースとして例をとらないでください。主な質問はDo I need to validate instance var or Not ?
.
ここで、root
初期化されずdoSomething()
に直接呼び出されたとしましょう。NullPtrException が発生します。
Do we need to guard against it ? If yes then how ? If no then why not ?
java - Joshua Bloch が効果的な Java の pop メソッドでスタックの「サイズ」値をデクリメントしたのはなぜですか?
これは、Joshua Bloch による、Effective Java 2nd edition の Item 6、pg 24、第 2 章のコードです。彼が定義する pop メソッドでは、 を使用しelements[--size]
ます。なぜ彼が を使用したのか疑問に思っていますが--size
、代わりelements[size--]
に同じ正しいを返す必要がありますか?
java - どのインターフェイスを優先し、何を基準にしますか?
効果的な Java は、抽象/具象クラスではなくインターフェイスの使用を奨励します。質問は、インターフェイス階層があるかどうか、どのインターフェイス タイプを選択する必要があるか、またその理由は何ですか?
たとえば、をArrayList
実装するList
を実装するCollection
を実装しIterable
ます。list
では、いつvs collection
vsを渡すのiterable
でしょうか?
明らかな答えは、各サブクラスがより多くの機能を追加し続けることです。では、必要な機能が一致するまで、階層を上っていく必要がありますか? つまり、架空のアプリケーションでのみiterator()
必要な場合は、Iterable
else use を使用しますList
か?
java - 多くのパラメーターを持つメソッドにビルダー パターンを使用しますか?
「Effective Java」の推奨事項を読み、多くのパラメーターを使用するコンストラクターに直面したときに Builder パターンを使用するようにしました。
多くのパラメーターを持つメソッドにも同じパターンが適用されますか?
java - 有効な Java 項目 6 - スタック ポップの実装
私はEffective Javaを読んでいて、時代遅れのオブジェクト参照項目で私に出てきたのは、彼の実装でしたpop()
:
への新しい参照を作成する必要があるのはなぜelements
ですか? しない理由
これにより、配列への新しい参照を作成することなく、廃止されたオブジェクト参照が無効になります。
java - 有効な Java 項目 9、CaseInsensitiveString の例は正しいですか?
この本の第 2 版の 36 ページを読んでいます。シンメトリの問題の解決策がわかりません。
と がある場合CaseInsensitiveString cis= new CaseInsensitiveString("hello")
、String s="hello"
これは非対称に動作します。なぜならs.equals(cis)
は true ですが、cis.equals(s)
false です...
私は何が欠けていますか?