【问题标题】:Avoid Unchecked Casting Warnings in Parameterized Type Casting在参数化类型转换中避免未经检查的转换警告
【发布时间】:2015-05-03 13:04:30
【问题描述】:

在类型转换参数化类型对象时是否可以避免unchecked 警告?例如,下面是我面临的实际情况,var1JComboBox<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 注释吗?

【问题讨论】:

  • 你总是可以简单地将suppresswarnings(未选中)注释扔到方法上,尽管我实际上希望看到一个“正确”的答案。
  • 确实如此,我浏览了许多页面、指南和文档,但找不到清理投射对象的答案。
  • 我不得不说这是一个我非常感兴趣的问题。

标签: java casting parameterized-types


【解决方案1】:

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

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

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

是否可以消除所有“未经检查”的警告? - 几乎

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 2012-03-18
    • 2013-10-02
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多