問題タブ [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.

0 投票する
2 に答える
3291 参照

java - EI_EXPOSE_REP2 setter method

Findbugs complains about date objects and suggests creation of defensive copies. I used copies in the constructor and getter method, but it is really necessary to create a defensive copy in setter method? Here is an example:

Is there a way to get the original object and make changes?

0 投票する
4 に答える
1393 参照

java - 有効な Java 項目 9: ハッシュコードのオーバーライドの例

私はEffective Java Item 9を読んでいて、サンプルコードを自分で実行することにしました。しかし、内部で何が起こっているのか正確にはわからない新しいオブジェクトをどのように挿入するかによって、動作が少し異なります。PhoneNumber クラスは次のようになります。

それから本によると、私が試したときのように、

HashMap には各エントリに関連付けられたハッシュ コードをキャッシュする最適化があり、ハッシュ コードが一致しない場合はオブジェクトの等価性をチェックしないため、これは "null" を出力します。それは私には理にかなっています。しかし、私がこれを行うとき:

これで「ジェニー」が返されます。2 番目のケースで失敗しなかった理由を説明できますか?

0 投票する
5 に答える
254799 参照

java - アサーションエラーとは何ですか? どの場合、自分のコードからスローする必要がありますか?

「Effective Java, 2nd edition」本の項目 2 には、作成者がオブジェクトの空の初期化を禁止したいコードのスニペットがあります。

ここで私を混乱させるのは、スローされる例外のタイプです。

AssertionErrorより適切なエラーがないためにスローされるのか、それともこのようにする必要があるためにスローされるのか、私にはわかりません。

assert私が理解しているように、このエラーは、ステートメントが失敗したときにフレームワークによってスローされます。また、javadoc に書かれているだけです

[AssertionError is] アサーションが失敗したことを示すためにスローされます。

しかし、ここで違反されているアサーション (true-false ステートメント) は見当たりません。もちろん、「このクラスのアイテムをインスタンス化してはならない」というステートメントに違反していますが、これがその背後にあるロジックである場合、すべてAssertionErrorの場所で s をスローする必要があり、それは明らかに起こりません。

FWIW、私はちょうど投げたでしょう

何か問題がありますか?AssertionError自分のコードでをスローする必要があるのはどのような場合ですか?

微妙な疑いで申し訳ありませんが、コードでこのパターンを頻繁に使用しており、正しいことをしていることを確認したいと考えています。

0 投票する
3 に答える
1370 参照

java - 戻り値の型の前の山括弧がジェネリック メソッドの定義から省略されることがあるのはなぜですか?

ジェネリック、特にジェネリック メソッドの優先に関する項目については、Effective Java Chapter 5 を読んでいました。戻り値の型の前のメソッド宣言の型パラメーター (山かっこの間) が省略される場合があることに気付きました。そのような場合が多いのですが、例えば第2版の135ページにはこうあります。

一方、宣言を使用した同様のジェネリックメソッドを見てきました

最初のはタイプミスですか?そうでない場合、いつ宣言から括弧を省略できますか?

ありがとう

0 投票する
1 に答える
579 参照

java - 効果的な Java: Builder パターン

私はEffective Java item# 2-The Builderパターンを読んでいました

http://www.informit.com/articles/article.aspx?p=1216151&seqNum=2

ここで、Java Bean は、複数のパラメーターを持つオブジェクトを作成する効果的な方法ではないと言われています。しかし、次のように javabean を持っている場合はどうなるでしょうか。

すべてのメンバー変数を Final として作成したことに注意してください

インスタンスは次の方法で作成できます。

私がこのようにすると何が悪いのですか?誰かが私を理解するのを手伝ってもらえますか? ありがとう、ラジャン

0 投票する
2 に答える
1166 参照

java - 有効な Java 項目 7: ファイナライザーを避ける

この驚くべき本の中で、著者のジョシュ・ブロッホは次のように述べています。

「ああ、もう 1 つ: ファイナライザーを使用するとパフォーマンスが大幅に低下します。私のマシンでは、単純なオブジェクトの作成と破棄にかかる時間は約 5.6 ns です。ファイナライザーを追加すると、時間が 2,400 ns に増加します。つまり、ファイナライザーを使用してオブジェクトを作成および破棄するのは、約 430 倍遅くなります。」

Javaで削除してオブジェクトを作成する方法はありますか?
オブジェクトを範囲外にするか、null にリセットするだけでよいと考えました。
私は自分のマシンでこれを実験するつもりです。楽しいアイデアのようですが、削除して反対する方法がわかりません。