我是Java的新手,之前使用过php,python和js。最近是python,所以要习惯于“ if myVar为None:”之类的东西。这是我的问题:我从某个库中获取语言环境为Optional,我只需要返回一种语言,或者如果发生超时或其他错误等,则返回一种其他语言。然后,我需要将语言传递给某个对象(上下文),并且稍后将上下文转换为请求的参数。所以我做类似
的事情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的那些更改是否会带来一些好处,还是我们只是在不加考虑地追随时尚。
所以,我的问题是-对Optional所做的那些更改是否增加了一些好处...
两种方法都肯定有优点和缺点:
从Optional
侧看,主要的“加号”是您消除了主要的bug来源;即NPE未能正确处理null
。主要的“减号”是使用Optional
的代码的详细程度。其他问答环节更详细:
...或者我们只是在不加考虑地追随时尚。
这是一个不同的问题!
现在,我想某些人可能会不加考虑地使用Optional
,但我看不出有多少证据。
[很明显,优点和缺点是一样的,需要思考。
所以您应该真正问问(自己!)是否>> you <
我建议使用
Optional
重写所有内容(在我的示例中)。
这是我的建议。
Optional
,并在代码中更改所有使用API方法的位置。如果听起来工作量太大,另一种选择是静默忽略该建议。
无论哪种方式,我们(StackOverflow社区)都无法为您决定。我们没有上下文,即使有,也将有各种各样的意见,没有明确的正确答案。