我有个密码:
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);。
发布于 2017-01-12 06:06:38
分配器,
案例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);
}
}https://stackoverflow.com/questions/41589466
复制相似问题