問題タブ [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 投票する
4 に答える
1304 参照

java - 非メモリ リソースとは

「 Effective Java 」を読んでいます。

ファイナライズに関する議論の中で、彼は次のように述べています。

C++ デストラクタは、他の非メモリ リソースを再利用するためにも使用されます。Java では、通常、try finally ブロックがこの目的で使用されます。

非メモリ リソースとは

データベース接続はメモリ以外のリソースですか? データベース接続を保持するためのオブジェクトがメモリを占有していませんか?

0 投票する
8 に答える
3048 参照

java - 生の型、無制限のワイルドカード、およびジェネリックでのオブジェクトの使用の違いは何ですか

私はEffective Javaのジェネリックに関する章を読んでいます。

との違いを理解するのを手伝ってSetください。Set<?>Set<Object>

次の段落は本からの抜粋です。

クイック レビューとして、Set<Object>任意の型のオブジェクトを含むことができるセットを表すパラメーター化された型Set<?>であり、不明な型のオブジェクトのみを含むことができるセットを表すワイルドカード型でSetあり、ジェネリック型をオプトアウトする生の型です。システム。

「いくつかの未知のタイプ」とはどういう意味ですか? すべての未知の型は型Objectですか? Set<?>その場合、との具体的な違いは何Set<Object>ですか?

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

java - Genericsの「再帰型バインド」とはどういう意味ですか?

私は、Effective Java [項目 27] の Generics に関する章を読んでいます。

本の中にこんな一節があります。

比較的まれではありますが、型パラメーターがその型パラメーター自体を含む何らかの式によって境界付けられることは許容されます。これは、再帰型バインドとして知られているものです。

この:

再帰型バインドとは何ですか? また、上記のコードは相互比較可能性を達成するのにどのように役立ちますか?

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

java - ネストされた静的ビルダー クラス、配管に関する詳細説明

次に、次のように呼び出されます。

それはすべて素敵ですが、いくつかの部分がわかりません。

呼び出しステートメントに 1 つ、メソッドに 1 つの2 つの Newbuild()ステートメントがありますが、作成される新しいオブジェクトは 1 つだけです ?

また、2 番目のオプションのパラメーターを指定せずに 2 回目の呼び出しを行うと、次のようになります。

MyPojo myPojo = new MyPojo.Builder("req").optionalOne(1).build();

optionalTwo がデフォルト値 (ゼロ) に戻るのはなぜですか。そして、最初に渡された値を保持しないでください(2)。これは静的クラスなので、1 つのインスタンスがすべての MyPojo 間で共有されますか?

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

java - Java:シリアル化中にreadObjectNoData()を追加するのはいつですか?

私はEffectiveJavaのシリアル化の章を読んでいます。私は本にある以下の段落を理解しようとしています。

シリアル化および拡張可能なインスタンスフィールドを持つクラスを実装する場合は、注意が必要です。インスタンスフィールドがデフォルト値(整数型の場合はゼロ、ブール型の場合はfalse、オブジェクト参照型の場合はnull)に初期化された場合に違反する不変条件がクラスにある場合は、次のreadObjectNoDataメソッドをクラスに追加する必要があります。

その声明が何を意味するのかわかりません。

これをテストするために、 Person(シリアル化可能と拡張可能の両方)というクラスを作成しました

–およびクラス:それを拡張するEmployee 。

私が作成したPersonクラスに不変条件はありますか?いつ違反されますか?EmployeeクラスのreadObjectData()メソッドのコードをコピーして貼り付けましたが、呼び出されませんでした。メソッドはいつ呼び出されますか?私は何かが足りないのですか?readObject()

0 投票する
6 に答える
23705 参照

java - readObjectとwriteObjectがプライベートであるのはなぜですか?また、一時変数を明示的に書き込むのはなぜですか?

効果的なJavaでのシリアル化に関する章を読んでいます。

  1. 誰がreadObject()とwriteObject()を呼び出しますか?これらのメソッドがプライベートとして宣言されているのはなぜですか?

  2. 以下は本からのコードの一部です

    size変数が一時的として宣言され、writeObjectメソッドで明示的に書き込まれる特定の理由はありますか?一時的なものとして宣言されていなかったら、とにかく書かれていたでしょう?

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

java - 有効な Java の項目 9 (equals contract): 例は正しいですか?

equalsBloch の素晴らしい本 "Effective Java"は、 が対称でない場合、コレクションの動作は不確定であると指摘していcontainsます。

彼が示した例 (以下に若干の修正を加えて再掲) で、Bloch は「false」が表示されたが、true または Exception も同様に表示された可能性があると述べています。

コレクション内の項目ごとにcontains(Object o)チェックするe.equals(o)かどうかが標準で指定されておらず、前者が実装されている場合は、「true」と表示されます。o.equals(e)ただし、Collections Javadocは、後者でなければならないと明確に述べています (そして、それは私が観察したことです)。

したがって、私が見る唯一の可能性は、「false」またはおそらく例外です (ただし、String Javadocは後者を排除しているようです)。

より広い点は理解しています。非対称性equalsがコレクションの外部のコードで問題を引き起こす可能性がありますが、彼が引用した例ではそれが見られません。

何か不足していますか?

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

java - JavaBean の getter/setter 実装における nullable java.util.Date の「防御的コピー」のエレガントな実装の例は?

以下の例を使用したJoshua Bloch の防御的コピー手法のエレガントな Java 実装はありますか? nullChecking は本当に問題だと思いますが、防御的なコピーを実現するためのより簡単な方法があるかもしれません。

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

java - equals メソッドと hashcode メソッドで Hibernate エンティティ オブジェクトの自動生成 ID を使用する

素敵なイコールとハッシュコード、すべての理論はここにあり、ここにもあります

多くの休止状態のエンティティ/ドメイン オブジェクトで、equals() および hashcode() 内で自動生成された ID を使用することにしました。

ただし、多くの Web サイトでは、比較中またはハッシュコードの使用中にオブジェクトを初めてデータベースに永続化するリスクがあるため、これを行うべきではないと述べています。

私の見解では、ほとんどのユースケースで、これが変更される可能性は他のどのフィールドよりもはるかに低いということです。

個々のドメイン オブジェクトには、最初に作成されたときに id が生成されますが、他のほぼすべてのフィールドは、通常のビジネス プロセス中に変更される可能性があります (一意のユーザー名でさえも変更できます ... )。

そして、私のドメイン オブジェクトの多くでは、一意の ID が考慮すべき唯一の適切なフィールドです (人、住所、ペット、... 顧客など)。フィールドを組み合わせるのは良い考えですが、自動生成された ID を使用しないのは良いアドバイスではないと思います。

他に何か不足していますか?

0 投票する
7 に答える
973 参照

java - Javaで不変

Blochは、 Effective Javaで、オブジェクトを不変にするためにすべてのフィールドを final にすることを推奨しています。

そうする必要がありますか?アクセサーメソッドを指定しないだけで不変になるわけではありません。

例えば

x上記のクラスは、正しいと宣言しなくても不変finalですか? 何か不足していますか?