我目前正在阅读Poornachandra Sarang的 Java编程,并且对Java Swing中JList
的{{1}}函数的用法有疑问。
我注意到getSelectedValue()
(其中source.getSelectedValue() != null
是source
)不仅被检查过一次,而且在转换为字符串后再次被检查,如{{1} }。
鉴于此,诸如JList
之类的类型转换是否有可能将变量突变为str != null
值?
(String)
答案 0 :(得分:4)
(String)这样的类型转换是否可以将变量突变为空值?
不。绝对不。 (String) someObject
会给您null
的唯一方法是,如果someObject
的值已经 null
。
但是...
可以想到,以下可以将null
分配给str
。
if (source.getSelectedValue() != null) {
String str = (String) source.getSelectedValue();
在多线程上下文中(并且在实践中 Swing UI通常是多线程的!),在执行代码时,另一个线程可能会使source
发生变化,因此第一个第二次调用getSelectedValue()
返回不同值。这是否是一个实际问题(以及可能的解决方案)取决于更大的前景。
部分解决方案(即针对特定的竞争条件)将如下重写部分代码:
Object selected = source.getSelectedValue();
if (selected != null) {
String str = (String) selected;
// ...
}
但是,这不一定能解决其他潜在的比赛条件。
答案 1 :(得分:-1)
鉴于此,像(String)这样的类型转换是否有可能将变量突变为空值?
不,一旦达到这一点,就可以确保source.getSelectedValue()
永远不会为空。
此外,第二次null检查是多余的,可以删除。
希望能回答您的问题:)