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 を拡張するクラスを含むいくつかのリストで呼び出されます。Bus の一部である busToAdd でいくつかの関数が使用されるため、タイプ E を使用しても機能しません。

警告を抑制せずにこれを再構築する方法について何か提案はありますか?

編集: busList に E を使用できることがわかりましたが、割り当てたバスをキャストする必要があり、同じ警告が表示されます。バスの代わりにすべての用途に E を使用してみることができます。テストしたら更新します。

4

2 に答える 2

3

なぜEここで使用しないのですか?

の一部であるいくつかのメソッドを使用していると言いますがBus、すべてのメソッドE extends Busを呼び出すことができるはずです。BusE

于 2011-09-05T10:15:42.050 に答える
1

メソッドの本体で型Busへの参照を置き換えることができるはずです。Eその後、警告はありません。

例:

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