Мне сказали, что это не хороший стиль для вызова потенциально дорогостоящих методов для булевых выражений (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());
}
};
Как хорошо, что getSupercategories()
является потенциально опасным, так как он опирается на атрибут отношения, которые не могут быть наступающим из местных элементов данных (item
передаются в качестве параметра общедоступного метода в этом классе, и после того, как подопечные отправляются getSuperCategories()
, который переоценивается в том же классе при объявлении catResolver
).
Это лучший подход к решению вышеприведенного аргумента?
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;
}
};
Где я сначала проверить, что item
не null
. если это так, то возвращается empy_set
, если нет, то я назвал дорогостоящий метод и получаю коллекцию, и если это не null
, верните коллекцию с элементами.
Благодарим вас за советы.
Это то, что я пробовал на втором подходе. Кажется ли это, что это лучший подход или есть что-то, что можно улучшить? – Bartzilla
Второй подход может быть лучше, но вам нужно определить, нужно ли возвращать копию результата или нет. –
Я хочу определить погоду getSupercategories() не возвращает значение null, поэтому я вызвал один раз, а затем, если не вернул копию; вместо вызова getSupercategories() проверьте не null, а затем снова вызовите getSupercategories() и верните, что не является хорошим подходом, поскольку это дорогостоящий метод. – Bartzilla