【发布时间】:2020-05-24 04:14:06
【问题描述】:
我是java新手,以前用过php、python和js。最近是 python,所以要习惯像“如果 myVar 是 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 在这里有点矫枉过正——我需要修改我的数据类 Context 来处理 Optional,我的 map() 和 orElse() 很难看——它们有 2-5 行代码,等等。还有单元测试需要返工。所以,我的问题是 - 对 Optional 的这些更改是否会增加一些好处,或者我们只是在不假思索地追随时尚。
【问题讨论】:
-
在特定环境中使用您认为最适合阅读的内容。
-
...除此之外,只需尝试将
map(locale-to-language conversion, language validation, logging, return language}之类的内容移动到它们自己的方法中。 -
这段代码甚至无法编译。请先提供一个最小且可重现的示例:stackoverflow.com/help/minimal-reproducible-example
-
@Naman,已经做到了。那些“语言环境到语言的转换”和“语言验证”已经是方法,而且我的日志记录正在使用其他一些局部变量,所以如果我将这些东西转移到新方法中,我需要 3 个额外的参数来进行日志记录。方法看起来不太好。
-
@RavindraRanwala 这是代表想法的伪代码,不是真实代码。