首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java,什么时候返回和使用"null“比Optional更好?

Java,什么时候返回和使用"null“比Optional更好?
EN

Stack Overflow用户
提问于 2020-02-08 10:22:52
回答 1查看 133关注 0票数 0

我是个java新手,以前用过php,python和js。最近的myVar,所以要习惯类似"if python is None:“这样的东西。这是我的问题:我从一些库中获取可选的语言环境,我只需要返回一种语言,或者如果发生超时,或者一些错误,等等。然后我需要将语言传递给一些对象(上下文),然后在以后的某个地方将上下文转换为请求的参数。所以我做了一些类似的事情

代码语言:javascript
复制
String getLanguage(){
  try {
    Optional<String> locale = getLocale();
    if (locale.isPresent()){logging, locale.get()-to-language conversion, language validation, 
      logging, return language} 
    else (logging, return null;)
  } except {logging error, return null};
}

Context c = new Context();
c.setSomething(something);
c.setLanguage(getLanguage());

and somewhere later:
Request r = new Request();
r.addParam(something, c.getSomething());
if (c.getLanguage() != null) {r.addParam(language, c.getLanguage())

我有一个建议,可以使用Optional重写所有内容。用下面的代码替换我的第一个方法。

代码语言:javascript
复制
Optional<String> getLanguage(){
  try {
    Optional<String> locale = getLocale();
    return locale.ifPresent(logging)
          .map(locale-to-language conversion, language validation, logging, return language}
          .orElse(logging, return Optional.isEmpty())
  } except {logging error, return Optional.isEmpty()};
}

and then somewhere later c.getLanguage().ifPresent(x -> r.addParam(language, x))

我以前从来没有用过Optional,所以我很高兴学到一些新的东西,我认为对于习惯了Optional的人来说,我的代码并不好。从另一方面看,Optional在这里有点夸张--我需要修改我的数据类上下文来处理Optional,我的map()和orElse()很难看--它们有2-5行代码,等等,单元测试也需要重写。所以,我的问题是--这些对Optional的更改是否增加了一些好处,或者我们只是在不假思索地追随时尚。

EN

回答 1

Stack Overflow用户

发布于 2020-02-08 13:20:58

我想说,当你的代码知道如何处理null的情况时,Optional是很好的。例如,您可以编写

代码语言:javascript
复制
 public String helloWorld(Optional<Long> input){
     String toReturn = "Hello "+ input.orElse("0")+ " times";
     return toReturn;
 }

但是,如果您正在与遗留代码进行交互,并且这些函数需要空输入,这将迫使您编写类似于

代码语言:javascript
复制
if(someOptional.isPresent()){
       return somevalue;
} else{
       return null;
 }

在上面的例子中,Optional不会比只使用null带来更多的好处。在这种情况下,我将使用null而不是Optional。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60123380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档