ブール式(getSupercategories()
)のために潜在的に高価なメソッドを呼び出すのは良いスタイルではないと言われました。同様に、それが(item
はこのクラスのパブリックメソッドへのパラメータとして送信され、病棟後に送信されるローカル・データ・メンバーから来ていない可能性があります関連属性によって裏打ちされていますので、getSupercategories()
が潜在的に危険であることをリファクタリングに最適なアプローチこのJavaスニペット
private final SuperCategoriesResolver<ProductModel> catResolver = new SuperCategoriesResolver<ProductModel>() {
@Override
public Set<CategoryModel> getSuperCategories(final CategoryModel item) {
return item == null || item.getSupercategories() == null ? Collections.EMPTY_SET
: new LinkedHashSet<CategoryModel>(
item.getSupercategories());
}
};
catResolver
と宣言するときに同じクラスでオーバーライドされるgetSuperCategories()
)。
これは、上記の議論に取り組むためのより良いアプローチですか?私が最初にitem
がnull
ではないことを確認し
private final SuperCategoriesResolver<ProductModel> catResolver = new SuperCategoriesResolver<ProductModel>() {
@Override
public Set<CategoryModel> getSuperCategories(final ProductModel item) {
if (item != null) {
Set<CategoryModel> superCategories = (Set<CategoryModel>) item
.getSupercategories();
if (superCategories != null)
return superCategories;
}
return Collections.EMPTY_SET;
}
};
。そうであれば返すempy_set
私は高価なメソッドを呼び出して、コレクションを取得し、ちょうどそれがない場合null
要素でコレクションを返します。
ありがとうございました。
これは私が2番目のアプローチで試したものです。この1つはより良いアプローチであると思われますか、改善できるものがありますか? – Bartzilla
2つ目の方法が良いかもしれませんが、結果のコピーを返す必要があるかどうかを判断する必要があります。 –
私は天気を決定したいgetSupercategories()はnullを返さないので、私は一度呼び出された後にコピーを返しません。 getSupercategories()を呼び出す代わりにnullをチェックしてからgetSupercategories()を呼び出して戻り値を返します。 – Bartzilla