【发布时间】: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<TYPE1>可能包含TYPE1的子类,所以你不能用 == 检查类(而且你可能应该使用equals)。