如何修改按类型拆分集合的Java代码以消除未检查强制转换警告
解决方案
可以通过Class类自带的cast()方法替代手动强制转换,彻底消除未检查强制转换警告。cast()是JDK提供的类型安全转换API,会在运行时校验类型合法性,返回值就是对应泛型类型,不需要额外强转,也不需要加@SuppressWarnings注解。
修改后的代码
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) { output_list1.add(class1.cast(input_elem)); } else if (input_elem.getClass() == class2) { output_list2.add(class2.cast(input_elem)); } else { throw new RuntimeException("Unsupported element type: " + input_elem.getClass()); } } }
补充说明
- 原有逻辑的
input_elem.getClass() == classX是严格匹配元素的实际类型与传入的Class对象,不会匹配子类实例。如果需要支持子类实例也被匹配到,可以将判断条件替换为class1.isInstance(input_elem)和class2.isInstance(input_elem) - 如果输入集合可能存在null元素,需要提前做null判断,避免调用
getClass()时抛出空指针异常 - 你可以根据业务需求调整不匹配元素的处理逻辑,比如改为忽略不匹配元素,或者将不匹配元素收集后返回,而不是直接抛出运行时异常
内容的提问来源于stack exchange,提问作者Ronnie Marksch
相关产品推荐
相关产品推荐

