問題タブ [defensive-copy]

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 投票する
1 に答える
360 参照

java - コンストラクターへの参照パラメーターに関する防御的コピー

JAVAのクラスのコンストラクターへの参照パラメーターに関して、防御的コピーとは何か教えてください。

どうもありがとう

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

java - 古いデータを与える ArrayList にオブジェクトを追加する (BeanUtils を使用した防御的コピーによってコピーされる): Spring 3

CustomerDAO クラス:

メソッドではCustomerDTO getCustomer(int customerId)、Spring を使用して CustomerDTO オブジェクトのコピーを返そうとしていますがBeanUtils.copyProperties(targetCustomer, origCustomer);、これらのコピーされたオブジェクトをメソッドのリストに追加するList<CustomerDTO> getCustomerList(List<Integer> customerIds)と、コメントに記載されているように奇妙な動作が発生します。削除している場合BeanUtils.copyProperties(targetCustomer, origCustomer);、動作は正しいです。

テストケース:

コピーされたオブジェクト: BeanUtils.copyProperties(targetCustomer, origCustomer);//spring BeanUtils

オブジェクトをコピーしない場合: BeanUtils.copyProperties(targetCustomer, origCustomer); //spring BeanUtils

誰かがこの動作の何が間違っているか、または考えられる説明を説明してもらえますか?

更新: BeanUtils を使用する目的:

メソッドから CustomerDTO オブジェクトを返す前に、可変オブジェクトの防御コピーを使用しようとしていますgetCustomer()だから私はこの投稿に従って浅いクローニングを使用しようとします。

更新: 使用するのが間違っていたため、不変性という言葉を削除しました。

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

java - 不変フィールドではありますが、*非最終*で不変クラスを構築する防御的コピーが必要ですか?

不変クラスを構築したい場合は、非 final フィールドへの参照を公開しないでください。ただし、 Strings のような不変オブジェクトの場合でも?

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

java - 防御的プログラミングのさまざまなケースにどう対処するか?

これはEffective Javaでの防御コピーの例です。私の根底にある質問のシナリオには防御的なコピーが必要であり、渡されたオブジェクトの変更を避けるようにクライアントに要求するコメントには対応できないと仮定します。

質問:

  1. Date自分自身をより一般的にするために、自分自身を取り込むコンストラクターがなく、オブジェクトが渡され、それ自体を複製するメカニズムがなく、そのようなオブジェクトが私たちに属していない場合、つまり、変更できない場合はどうすればよいですか?

  2. コンストラクターが型パラメーターを引数として取りPeriod(T object)、T が変更可能である可能性があるため、防御コピーが必要な場合はどうなりますか。Tが何であるかはわかりません。この場合、防御的コピーを行うにはどうすればよいですか?

  3. Date一部のサブクラスにはそれ自体のオブジェクトを作成するようなコンストラクターがあり、一部のサブクラスにはそうするメカニズムがない場合に渡されるインターフェイスとは何ですか?

  4. どのくらいの深さまで防御的にコピーする必要がありますか? 配列をコピーするとしましょうが、配列要素は変更可能でしたか?

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

java - "By" の複製: Selenium を使用した防御的プログラミング

だから私は、Selenium でテストしている Web サイト用の Panel オブジェクト API を書いています。これは、将来、私の管理外の多くの人々によって使用される可能性が高いため、防御的にすることもできると思いました (効果的な Java で見られる)。しかし、By のクローンを返すということになると、私は壁にぶち当たりました。

arrayList のようなメソッドを期待していました:

By は静的に作成されるため存在しません。さらに、 By を除いて、情報がそこにあると、 By から情報を取得する方法がわかりませんtoString()。だから私は のパーサーを書くことができますBy.toString()が、それは仕事が何であるかについて多くの努力のように思え、起動するのはあまりエレガントではありません.

セレンでByロケーターをクローンするより面倒でない方法を誰かが提案できますか?

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

java - このクラスをより不変にすることはできますか?

このクラスを不変にするためにできることは他にありますか? 文字列はすでに不変であり、セットは変更不可で返されます。tutees と name 変数はプライベートで最終的なものです。他に何ができるでしょうか?Tutor クラスを使用するクラスだけがパッケージ内にある場合、コンストラクター、getTutees メソッド、および getName メソッドを package-private に変更できますか?

編集:

これが Student クラスです。この質問では、Student を不変にするために必要な変更について説明するよう求められました。変数を final にできるように、両方のセッター メソッドをコメントアウトしました。これが真に不変にする唯一の方法ですか?

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

java - ソナー違反:Security-Array が直接保存されます

Sonar を使用してアプリケーションのコードを変更しようとしています。それを修正する方法とその理由は? ありがとう。

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

java - 別のユーザー定義クラスのメンバー変数がある場合、Java クラスを不変にするにはどうすればよいですか?

最近、Java 開発者の役割のインタビューで、クラス B のオブジェクトであるメンバー変数があり、クラス B がプロジェクトの外部にあり、編集できない状況で、クラス A を不変にする方法を尋ねられました。さらに、プログラマーはクラス B に、別のユーザー定義クラスのオブジェクトである独自のメンバー変数を持つことさえあります。よく考えて、クラス B がディープ クローン自体のメソッドを実装して公開しない限り、方法はないとインタビュアーに伝えました。

しかし、インタビュアーは納得していませんでした。そのようなクラスを不変にする方法は本当にありますか?

私の記憶が正しければ、これが彼が説明した状況でした。彼は私にクラス A を不変にすることを望んでいました。