2017-03-18 7 views
1

を書く避けるために、私は以下のようなコードの一部があります分割のJavaビルダーは、同じコードを複数回

Problem hashProblem; 
String indexName; 
if(condition.getOwner() != null) { 
    indexName = sourceLocation ; 
    hashProblem = new Problem().builder() 
     .locationID(condition.getLocationID()) 
     .sourceLocation(condition.getSourceLocation()) 
     .build(); 
} 
else { 
    indexName = currentLocation; 
    hashProblem = new Problem().builder() 
     .locationID(condition.getLocationID()) 
     .currentLocation(criteria.getcurrentLocation()) 
     .build(); 
} 

をよりエレガントな方法でこのコードを記述する方法はありますか? hashProblemオブジェクトを構築する際には、常にlocationIDが必要です。 .locationIDを1回だけ書くことができるように、ビルダーを分割する方法を考えることができません。私はビルダーのためにロンボク(https://projectlombok.org/features/Builder.html)を使用しています

答えて

2

確かに。ビルダーは他のどのようなオブジェクトでもあります。ビルダーを作成してbuild()を呼び出す代わりに、ビルダーへの参照を保存し、条件付きで何かを実行してからbuild()を呼び出すことができます。ところで

​​

new Problem().builder()命名規則の面で少し奇妙に見えます。通常new Problem.Builder()が表示されます。BuilderProblem、またはProblem.builder()(no new)のネストされたクラスです。builder()Problem.Builderを返す静的メソッドです。

+0

私はロンボクをビルダーに使用しています。私が新しいProblem()を使用しないと、エラーメソッド呼び出しが発生します。 – user1692342

+0

LombokのBuilderを使用している場合:Builder b = new Problem()。builder()。locationID(condition.getLocationID());エラーが発生する互換性のない型 – user1692342

+1

'Builder b'の代わりに' Problem().builder() 'が返す型を' b'にしてください。ビルダークラスの通常の名前なので、ビルダーと呼んでいます。 –

関連する問題