public class Playground {
public static void main(String[] args) {
String s = "blah";
Character lclfs = s.contains("/") ? '/' : s.contains("\\") ? '\\' : null;
}
}
我遗漏了什么(使用Java1.8)?
这是因为您的代码将尝试取消框null
。使用IntelliJ,这将直接显示为警告:“取消null的装箱可能会产生NullPointerException”。
另一种选择是这样做:
String s = "blah";
Character lclfs = s.contains("/") ? Character.valueOf('/') :
s.contains("\\") ? Character.valueOf('\\') : null;
正如@Antoniossss指出的,这也会有所帮助:
String s = "blah";
Character lclfs = s.contains("/") ? Character.valueOf('/') :
s.contains("\\") ? (Character)'\\' : null;
谈到IntelliJ中的警告,上面的代码现在表示:“不必要的装箱'character.valueof('\')'”。所以也许你应该试着重构你的代码。您可以引入java.util.optional
,而不是使用显式的null
:
Optional<Character> lclfs = s.contains("/") ? Optional.of('/') :
s.contains("\\") ? Optional.of('\\') : Optional.empty();
我们知道我们可以将null赋给可为null的类型。例如: 我们知道第二种说法是有效的,因为有人告诉我们它是有效的,我们只是接受它,而不问为什么。但如果查看的源代码,则为: 我们可以将赋给为的原因是由于隐式运算符,它允许您隐式强制转换int为。根据隐式运算符的规则,作为的右手边,必须是结构类型,但显然不是合法的结构值,那么如何做(更不用说本身就是一个结构),为什么不违反隐式运算符规则
我有以下方法: 租户数据库服务。findTenantById(tenantId)返回可选的: 当为null时,我希望抛出异常。相反,我看到正在抛出: 有什么帮助吗?
问题内容: 运行此命令时: 响应为: 这对我来说真是太棒了。我本以为这会带来编译时错误。 为什么我可以在Java中抛出null,为什么将其转换为NullPointerException? (实际上,鉴于我抛出的是null,因此我不知道这是否是“ upcast”) 除了一个非常愚蠢的面试问题(请没人在面试中问这个问题)之外,我看不到任何理由。也许您想被解雇,但这就是…我的意思是,为什么还会有人呢?
我在代码中打开ListActivity时得到空指针异常,但所有跟踪都不是我的代码。
我们最近在生产中遇到了一个我觉得非常有趣的错误。我长期以来的理解是Java布尔只能是false或true。然而,在三元运算符中,它似乎最终可以解析为null,而且它从未产生编译错误,并且一直构建到生产。我很惊讶下面的代码没有产生编译错误。有人知道为什么它编译得很好吗?恕我直言,它不应该编译!它最终解析的值是一个本机布尔值。
我在写Fizz Buzz的时候遇到了一个意想不到的互动。如果我执行