我正在尝试理解并使用Java 8 - 可选功能。我想重构这个代码块。没有可选我有这样的条件。
ClassA objA = findObject();
if(objA == null || objA.isDeleted()){
throw Exception("Object is not found.");
}
我想使用Optional wrapper转换此块。我已经阅读过有关过滤器,ifPresent函数,但我找不到方法。也许这很简单,但我是Java 8的新手。如果你能提供帮助,我将不胜感激。
答案 0 :(得分:6)
您不应该使用Optional<T>
来单独替换if
声明,因为它不会更好,并且不会为您带来任何好处。一个更好的解决方案是让findObject()
方法返回Optional<ClassA>
。
这使得此方法的调用者决定在&#34; no value&#34;情况下。
假设您已进行此更改,则可以使用Optional<T>
类型:
findObject().filter(a -> !a.isDeleted()) // if not deleted then do something
.map(...) // do some mapping maybe?
... // do some additional logic
.orElseThrow(() -> new Exception("Object is not found."));//if object not found then throw exception
请参阅Optional<T>
课程,让自己熟悉API和可用的方法。
答案 1 :(得分:3)
@Eric正如您在评论中提到的,如果您不希望(不能)更改某些约束的findObject()的返回类型,您可以执行以下操作:
ClassA objA = findObject();
Optional<ClassA> myOpt =
Optional.ofNullable(objA)
.filter(e->!e.isDeleted())
.orElseThrow(()->new Exception("Object is not found.");
答案 2 :(得分:0)
using UnityEngine;
using UnityEngine.EventSystems;
public class Drop : EventTrigger {
public override void OnDrop(PointerEventData eventData) {
// Check if the eventData is Null.
if (eventData.pointerDrag != null) {
Debug.Log("OnDrop called.");
}
}
}