我是java新手,以前使用过php、python和js。最近使用python,所以要习惯类似“IfMyVar为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<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))
我以前从未使用过可选,所以我很高兴学习新的东西,我认为对于习惯可选的人来说,我的代码不好。从另一方面,我看到这里的可选性在这里是大材小用的——我需要修改我的数据类上下文来处理可选性,我的map()和orElse()是丑陋的——它们有2-5行代码,等等。单元测试也需要返工。所以,我的问题是——这些对可选的改变是增加了一些好处,还是我们只是不假思索地追随时尚。
当代码知道如何处理空情况时,我会说可选是好的。比如你可以写
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。
所以,我的问题是-这些对可选的更改是否增加了一些好处。。。
这两种方法肯定都有优点和缺点:
从可选
方面看,主要的“优点”是消除了bug的主要来源;i、 e.未正确处理可能返回的null
而导致的NPE。主要的“缺点”是使用可选
的代码冗长,而且实际上并没有消除所有bug;e、 g.如果您调用可选。在“空的”
选项上获取
,您将获得异常。
其他Q
空检查vs可选是当前检查
- 用于可选
- 可选vs. null。Java8中可选的目的是什么?
- 使用Optional.ofNullable作为三元运算符的替代是一个好的实践吗?
... 或者我们只是在不假思索地追随时尚。
那是另一个问题!
现在我想有些人可能会不假思索地使用
可选的
,但我看不到多少证据。很明显,有优点也有缺点,这是需要思考的。
所以你真的应该问(你自己!)如果
我有一个建议[在我的示例中]使用
Optional
重写所有内容。
这是我的建议。
在版本控制系统中创建分支
在分支中,将API方法更改为使用可选
,并更改代码中使用API方法的所有位置
做出判断:这是否改善了情况?这样的努力值得吗
如果API目前或将被其他人的代码使用,也要征求他们的意见
决定是否继续,执行决定,然后继续下一个问题
如果这听起来像是太多的工作,另一个选择是静静地忽略这个建议。
无论哪种方式,我们(StackOverflow社区)都无法为您做出决定。我们没有上下文1,即使我们有,也会有一系列的观点,没有明确的正确答案。
1-例如,没有语言环境和可确定语言的可能性是多少。应用程序作为一个整体应该对此做些什么?它应该跳伞吗?它应该取代违约吗?可以在这里替换默认值吗?我们看不到“大局”。
获取值GSON
setupViewPager()方法:
有人能帮我处理下面的代码吗?我想要一个使用函数的等价物。 只是一个音符我试过这个,但它不工作 不起作用的是-当值存在并且返回可选值时。empty()我希望原始函数返回null。它现在正在返回“随机”。 我的假设是,由于方法返回,它被替换。 请注意,原始代码是由其他人编写的。由于它有很多依赖关系,我无法更改输入/输出参数。:(
我有一段代码,其中一个接口有一个可选的返回方法,实现它的一些类返回一些东西,其他的没有。 在努力拥抱这个辉煌的“空杀器”的过程中,下面是我尝试过的: 附注。如果(X!=null)不能做,Optional有没有真正的用处?
问题内容: 我得到了以下简单代码: 并且在命中时为null (引发null指针异常)。 我的问题是,即使我将其设置为在每个ip的.s上进行拆分,为什么ipArray仍为null? 问题答案: 使用,您的问题将得到解决。问题是String#split接收到一个正则表达式,点(。)符号在正则表达式中是一个特殊字符,因此您需要对其进行转义以将其解释为纯点,并且反斜杠也是转义字符在Java中,您也必须对其
我喜欢现在Java标准库中的选项。但有一个基本问题我一直碰到,但我还没想好如何用最好的(最容易读懂、最漂亮、最短的)方法解决: 当选项为空时如何从方法返回? 如果可选项为空,我如何从方法返回,而不必在方法的其余部分中使用,也不必声明额外的变量和额外的块嵌套级别? 或者如果不可能得到所有这些,那么处理这种情况的最佳方法是什么?