我的情况导致未经检查的投射警告。我知道我可以使用supress警告,但我的直觉告诉我有一种方法可以通过改变我编码这段代码的方式来避免它。然而,我似乎无法将解决方案提升到表面并且可以用一双新鲜的眼睛来做。
//function removes elements from input, orders them and re-adds them
private <E extends Bus> int orderBuses(ArrayList<E> busList) {
Bus busToAdd = null;
...
busList.add((E) busToAdd);
return 0;
}
使用多个列表调用该函数,每个列表都包含一个扩展Bus的类。 busToAdd上使用了几个函数作为总线的一部分,所以使用类型E不起作用。
有关如何重新构建此内容的任何建议,而不必禁止警告?
编辑:发现我可以使用E作为busList,但最终必须转换我分配给它的总线,这会导致相同的警告。我可以尝试将E用于所有用途而不是总线,我会在测试时更新。
答案 0 :(得分:3)
为什么不使用E
在这里不起作用?
您说您使用的某些方法属于Bus
,但自E extends Bus
起,您应该可以调用Bus
上的所有E
方法同样。
答案 1 :(得分:1)
您应该能够在方法正文中用Bus
替换对E
类型的引用。然后就没有警告了。
示例:
E busToAdd = busList.get(0);
// ...
busList.add(busToAdd);