如何使用fromNullable包装返回可选<t>的方法?

时间:2015-06-10 03:35:13

标签: java guava optional

我有一个我不拥有的方法,它返回null但返回类型是Optional&lt; Boolean&gt;。当我调用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)
})

enter image description here

3 个答案:

答案 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());