我是个java新手,以前用过php,python和js。最近的myVar,所以要习惯类似"if python is None:“这样的东西。这是我的问题:我从一些库中获取可选的语言环境,我只需要返回一种语言,或者如果发生超时,或者一些错误,等等。然后我需要将语言传递给一些对象(上下文),然后在以后的某个地方将上下文转换为请求的参数。所以我做了一些类似的事情
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重写所有内容。用下面的代码替换我的第一个方法。
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的更改是否增加了一些好处,或者我们只是在不假思索地追随时尚。
发布于 2020-02-08 13:20:58
我想说,当你的代码知道如何处理null的情况时,Optional是很好的。例如,您可以编写
public String helloWorld(Optional<Long> input){
String toReturn = "Hello "+ input.orElse("0")+ " times";
return toReturn;
}但是,如果您正在与遗留代码进行交互,并且这些函数需要空输入,这将迫使您编写类似于
if(someOptional.isPresent()){
return somevalue;
} else{
return null;
}在上面的例子中,Optional不会比只使用null带来更多的好处。在这种情况下,我将使用null而不是Optional。
https://stackoverflow.com/questions/60123380
复制相似问题