加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

JavaScript模拟java.lang.Optional?

发布时间:2020-12-15 01:03:31 所属栏目:Java 来源:网络整理
导读:我正在寻找一个客户端JavaScript库,它允许我使用某种类型的Option类型编写类似于我在其他语言中可以执行的代码,例如java.lang.Optional. 我的目标是避免客户端代码中的空/未定义检查并使API更明确. 这是我希望能够编写的API: var dictionary = { key1: 'val

我正在寻找一个客户端JavaScript库,它允许我使用某种类型的Option类型编写类似于我在其他语言中可以执行的代码,例如java.lang.Optional.

我的目标是避免客户端代码中的空/未定义检查并使API更明确.

这是我希望能够编写的API:

var dictionary = {
    key1: 'value1',key2: 'value2'
}

function getValue(key){
    var value = dictionary[key];
    if(value !== null && value !== undefined) 
         return Optional.of(value);
    else 
         return Optional.empty();
}

这是客户端代码:

var value = getValue('key3');
if(value.isPresent())
     console.log('got a value: ' + value.get().toUpperCase());
else
     console.log('no value found!');

或者有时:

var value = getValue('unknown key').orElse('default value');

如果我在Optional.empty()值上调用get(),它应该抛出某种错误.
如果我在null或undefined上调用Optional.of(),它也应该抛出.

最佳答案
鉴于java.lang.Optional source,自己编写一个Optional实现应该不会那么难.

虽然您必须考虑一些差异,即JavaScript区分undefined和null,但您没有Generics这样的概念,并且某些人认为map的Java实现为broken.然而,它实现起来相当容易.

但是,我自己完成了一个实现(optional.js),它适合我的需要,如果你愿意,你可以使用它,但它可能不满足你的所有要求(即()()不会在undefined或null上抛出异常,但get()呢)

用我的代码,你的例子就像

function getValue(key){
    return Optional.of(dictionary[key]);
}

var value = getValue('key3');
value.ifPresent(function() {
     console.log('got a value: ' + value.get().toUpperCase());
 });

顺便说一句.像这样的代码

if(value.isPresent())
     console.log('got a value: ' + value.get().toUpperCase());
else
     console.log('no value found!');

对于Optional是无效的用例,因为您可以轻松替换它将null / undefined检查.但是如果你需要像filter,map,flatMap和ifPresent这样的方法,那么你将从中受益更多.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读