我有一个我不拥有的方法,它返回null但返回类型是Optional< Boolean>。当我调用x.IsPresent()时它会抛出(场景#2)。我尝试将方法包装在fromNullable中但是我得到了类型不匹配(下面的屏幕截图)。我怎么能解决这个问题,IsPresent()不会抛出?
var $in = $('input'),
input = $in[0], //here input is a dom element reference
dataMap = input.dataset;
//if dataset is not supported
if (typeof dataMap == 'undefined') {
dataMap = {};
$.each(input.attributes, function (key, attr) {
var match = attr.name.match(/^data-(.+)/);
if (match) {
dataMap[match[0]] = attr.value;
}
})
}
$.each(dataMap, function (key, value) {
console.log(key, value)
})
答案 0 :(得分:5)
使用
Optional<Boolean> x = get_I_dontHaveControlOverThisMethod();
if(x == null) x = Optional.absent();
如果你经常调用这些方法,可以将它包装成函数:
static <T> Optional<T> safeOptional(Optional<T> optional) {
return optional == null ? Optional.absent() : optional;
}
并使用:
Optional<Boolean> x = safeOptional(get_I_dontHaveControlOverThisMethod());
答案 1 :(得分:3)
Optional.fromNullable(get_I_dontHaveControlOverThisMethod())
的类型为Optional<Optional<Boolean>>
,而不是Optional<Boolean>
。
答案 2 :(得分:0)
您可以使用Optional<Optional<Boolean>>
“展开”或“展平”.or(Optional.<Boolean>absent())
:
Optional<Boolean> x = Optional.fromNullable(get_I_dontHaveControlOverThisMethod())
.or(Optional.<Boolean>absent());