問題タブ [immutables-library]
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 - sbt を使用した不変オブジェクトの intelliJ IDEA サポート
IDEA およびsbtでJava immutablesライブラリを使用すると、コードのコンパイルと実行は正常に機能しますが、生成されたクラスを使用すると、エディタで「シンボルを解決できません ...」および「メソッドを解決できません ...」というエラーが表示されます。
ドキュメントに従ってIDE をセットアップすると、Maven では問題なく動作しますが、sbt の問題は解決しません。
sbt を使用して IDEA で生成されたソースに対してエディターのサポートとコード補完を機能させるにはどうすればよいですか?
java-8 - dropwizard での逆シリアル化の問題、ImmutableList を変換できない文字列リストへ
Java 8 機能を備えた dropwizard 1.1.0 を使用しています。Immutables パッケージも使用しています。利益センターのリスト (文字列リスト) を JSON から同等の Java に変換しようとすると、デシリアライゼーションの問題に直面しています。
エラー
非具体的なコレクション タイプ [コレクション タイプ; クラス com.google.common.collect.ImmutableList、[単純型、クラス java.lang.String]] を含む
不変の Java クラス
イミュータブルは、上記の DTO を以下の属性を持つ最終クラスに生成しました
私のdropwizardアプリケーションのブートストラップでは、以下のモジュールを登録しました
私のPOM.xmlでは、依存関係として以下を設定しています
java - Immutables で特定の Map 実装を強制する
Immutables Java ライブラリを使用していますが、特定の参照を使用せずに特定のマップ実装を強制するにはどうすればよいですか?
上記のコードを使用すると、具象Map
はLinkedHashMap
.
上記のコードを使用すると、参照と実装の両方がTreeMap
.
参照として指定するが具象型としてMap
強制する方法はありますか?TreeMap
java - Immutables を使用した単体テストでは、実際のオブジェクトまたはモックを使用する必要がありますか?
変更可能なエンティティを使用するサービスをテストする必要がある場合は、必要な最小のオブジェクト (実際のオブジェクト) を作成してサービスに渡します。例:
明らかに User には多くのフィールドがありますが、resetPasswordService
必要ないので設定しません。メールではない User フィールドの名前を変更しても、このテストは変更されないため、これは非常にリファクタリングに適しています。
Immutablesオブジェクトで同じことをしようとすると、問題が発生します。同じ例に固執し、ユーザーをエンティティから不変に変えます。
java.lang.IllegalStateException: ユーザーを作成できません。必要な属性の一部が設定されていません [postalAddress、signupDate、city、....]
オブジェクトを構築しようとすると、これはビルダーで失敗します。それで、私は何をすべきですか?
- ユーザーにモックを使用し、モックがモックを返すたびに妖精が死んでもモックを返すようにします
- テスト用の DSL を作成し、必要のないすべてのフィールドを含むユーザー ツリー構造全体を構築するためのある種のファクトリを用意しますか? 重く、リファクタリングしにくいようです。これにより、テストの要件がそれほど透明ではなくなります。
- ユーザーのすべてのフィールドを作成
@Nullable
し、ビルダーにオブジェクトを検証させませんか? これにより、実稼働環境に不完全なオブジェクトが存在するリスクにさらされることになりますよね? - 私が逃した他のオプション?
ユーザーは不変の値オブジェクトではなく、エンティティであるべきだと私は知っています。分かりやすいので、この例では User を使用しました。