【问题标题】:Fixing an unresolved cast修复未解决的演员表
【发布时间】:2021-08-19 18:28:08
【问题描述】:

有没有办法更改以下代码,以便根据使用的类型拆分集合,使其没有未经检查的强制转换?

    public
    static <TYPE, TYPE1 extends TYPE, TYPE2 extends TYPE> void
    split(
            Collection<TYPE> input_list,
            Collection<TYPE1> output_list1,
            Collection<TYPE2> output_list2,
            Class<TYPE1> class1,
            Class<TYPE2> class2) {
        for (TYPE input_elem : input_list) {
            if (input_elem.getClass() == class1) {
                //noinspection unchecked
                output_list1.add((TYPE1) input_elem);
            } else if (input_elem.getClass() == class2) {
                //noinspection unchecked
                output_list2.add((TYPE2) input_elem);
            } else
                throw new RuntimeException();
        }
    }

【问题讨论】:

  • 别忘了,Collection&lt;TYPE1&gt; 可能包含 TYPE1 的子类,所以你不能用 == 检查类(而且你可能应该使用 equals)。

标签: java generics


【解决方案1】:

关于Test if object is instanceof a parameter type的回答

建议

for (TYPE input_elem : input_list) {
    if (class1.isInstance(input_elem)) {
        output_list1.add(class1.cast(input_elem));
    } else if (class2.isInstance(input_elem)) {
        output_list2.add(class2.cast(input_elem));
    } else {
        throw new RuntimeException();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    相关资源
    最近更新 更多