我有一个代码:
public interface A{
default Optional<MyClass> getMyClass() {
return Optional.empty();
}
default boolean isPresent(){
return getMyClass().isPresent();
}
}
public enum MyEnum implements A{
private MyClass someObject;
MyEnum(MyClass someObject) {
this.someObject = someObject;
}
//...
@Override
public Optional<MyClass> getMyClass() {
return Optional.ofNullable(someObject);
}
}
我想将此代码更改为Optional.ifPresent()
之类的内容。我需要这个,而不是我现在拥有的Optional.isPresent
+ Optional.get
。
我尝试执行Optional.ofNullable(someObject).ifPresent()
之类的操作,但我不知道应该在ifPresent()
参数中放置什么来获得与上面代码相同的结果。
编辑:
从评论中我了解到解决方案就是改变
if(something.isPresent()){ //do something }
来
something.getMyClass().ifPresent(val -> //do something);
在我使用接口的类中。
答案 0 :(得分:1)
安洛先,
案例1
if(something.isPresent())
{
//do something
}
在此块中,您可以使用非最终变量,例如:
String myString = null;
if(something.isPresent())
{
myString = "Hello";
}
案例2
something.getMyClass().ifPresent(val -> //do something);
在此块中,您无法使用非最终变量,例如:
String myString = null;
something.getMyClass().ifPresent(val -> myString = "Hello"); // does not work
要解决此问题,您需要使用一个元素列表:
final String myString[] = {""};
something.getMyClass().ifPresent(val -> myString[0] = "Hello"); // will work
如果你有最终对象,那么你可以调用它的方法来修改它:
final SomeClass object = new SomeClass();
something.getMyClass().ifPresent(val -> object.someMethod()); // will work
您也可以使用方法参考:
class SomeClass {
// ...
public void calculate(MyClass value) {
// do something
}
public void someMethod() {
something.getMyClass().ifPresent(this::calculate);
}
}