0

我有一种情况导致未经检查的演员表警告。我知道我可以使用抑制警告,但我的直觉告诉我有一种方法可以通过更改我编写此代码段的方式来避免它。然而,我似乎无法让解决方案浮出水面,并且可以用一双新的眼睛来做。

//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 上使用了几个函数,它们是 Bus 的一部分,因此使用类型 E 将不起作用。

关于如何在不必抑制警告的情况下对其进行重组的任何建议?

编辑:发现我可以将 E 用于 busList,但最终不得不强制转换我分配给它的总线,这会导致相同的警告。我可以尝试将 E 用于所有用途而不是 Bus,我会在测试后更新。

4

2 回答 2

3

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

您说您正在使用一些属于' 的方法Bus,但是因为E extends Bus您应该也可以调用所有Bus' 方法E

于 2011-09-05T10:15:42.050 回答
1

您应该能够在方法的主体中替换对类型Bus的引用。E那么就没有警告了。

例子:

E busToAdd = busList.get(0);
// ...
busList.add(busToAdd);
于 2011-09-05T10:24:47.477 回答