可以将强制类型转换变量键入null值吗?

时间:2019-04-26 02:02:47

标签: java swing

我目前正在阅读Poornachandra Sarang的 Java编程,并且对Java Swing中JList的{​​{1}}函数的用法有疑问。

我注意到getSelectedValue()(其中source.getSelectedValue() != nullsource)不仅被检查过一次,而且在转换为字符串后再次被检查,如{{1} }。

鉴于此,诸如JList之类的类型转换是否有可能将变量突变为str != null值?

(String)

2 个答案:

答案 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检查是多余的,可以删除。

希望能回答您的问题:)