Я хочу создать метод, который будет использовать дополнительные функции и возвращать значение NodeId.
Это значение я должен извлечь из объекта Asset.
В некоторых случаях я уже использую некоторые функции, такие как ifPresent, filter, flatMap. Но теперь я хочу четко понять, могу ли я использовать Необязательно с простыми методами, как в примере ниже, где мне нужно просто извлечь значение из другого объекта
Первый пример предположительно не очень хороший, но, тем не менее, я попробуйте использовать необязательно:
public Optional<NodeId> findParentNodeIdByAsset(Asset asset) {
Optional<Asset> tmpAsset = Optional.ofNullable(asset);
if(tmpAsset.isEmpty()) {
throw new NullPointerException();
}
return Optional.ofNullable(tmpAsset.get().getParents().iterator().next());
}
Во втором примере я пытаюсь написать то же самое, но без Optional:
public NodeId tmpFindParentNodeIdByAsset(Asset asset) {
if(Objects.isNull(asset)) {
throw new NullPointerException();
}
return asset.getParents().iterator().next();
}
Optional
сделает API чище и лучше, чем ... ожидание исключения NullPointerException. Это при условии, что вы правильно используетеOptional
, чего, ИМО, вы не являетесь. Я бы простоreturn Optional.ofNullable(asset).map(asset -> asset.getParents().iterator().next());
. В этом сутьOptional
: вызывающий проверит, пуста ли она перед ее использованием. - person ernest_k   schedule 15.10.2019