未经检查的演员:在这种情况下有没有办法避免它?

时间:2011-09-05 10:09:18

标签: java generics arraylist unchecked

我的情况导致未经检查的投射警告。我知道我可以使用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用于所有用途而不是总线,我会在测试时更新。

2 个答案:

答案 0 :(得分:3)

为什么不使用E在这里不起作用?

您说您使用的某些方法属于Bus,但自E extends Bus起,您应该可以调用Bus上的所有E方法同样。

答案 1 :(得分:1)

您应该能够在方法正文中用Bus替换对E类型的引用。然后就没有警告了。

示例:

E busToAdd = busList.get(0);
// ...
busList.add(busToAdd);