java - 在参数化类型转换中避免未经检查的转换警告

标签 java casting parameterized-types

是否有可能避免 unchecked对参数化类型对象进行类型转换时发出警告?比如下面是我面对的实际情况,var1类型为 JComboBox<RandomType>我希望将其存储在 Map 中然后检索它迫使我进入以下情况。

    JComboBox<RandomType> var1 = new JComboBox<RandomType>();

    Object varRaw = var1;

    JComboBox<RandomType> var2 = (JComboBox<RandomType>) varRaw;

    JComboBox<RandomType> var3;
    if (JComboBox.class.isAssignableFrom(varRaw.getClass())) {
        var3 = JComboBox.class.cast(varRaw);
    }

常规转换和条件转换都会产生相同的警告。

在这种情况下是否可以避免使用 @SuppressWarnings 来避免警告?注释?

最佳答案

我的回答是否定的,没有更好的选择(据我所知)。但我不是权威消息来源,而且似乎很难证明所有其他选择都不会出现“错误”警告。

我已经到了假设周围有一些警告的较小邪恶的地步(是的,有 @SupressWarnings unchecked 但我想知道是否出现了值得注意的事情)。出于同样的原因,我不赞成 javac -Xlint:unchecked 非标准选项

其他消息来源还表示,不可能在所有情况下都禁止未经检查的警告(特别是在处理未完全适应泛型的库时)。例如在这个Generics tutorial作者说

Is it possible to eliminate all "unchecked" warnings? - Almost

然后她进行了一些让我不知所措的笨拙的技术解释。所以不知道她说的能不能证明什么。

我只知道我无法证明 unicorn 不存在。但是,如果我没有注意到任何人实际注册了他们的存在,那么我假设他们没有这样做是公平的。那是 Falsafiability , 只是解决这个邪恶的技术问题而不是愚蠢的 unicorn 。

关于java - 在参数化类型转换中避免未经检查的转换警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28822326/

相关文章:

java - 如果 <T> 不是输入参数,参数化方法如何解析?

java - 用Java动态查找局域网中的其他主机

java - 如何重命名java进程?

java - 从独立的 Java 类调用时的单例类行为

java - 退出 do-while 循环应用程序

c++ - boost::detail::addr_impl_ref 的目的是什么?

c++ - 重新解释_cast<bool*> 清零内存是否安全?

java - 泛型并在 Java 中转换