3

私は単純なクラス構造を持っています:

class BaseModel {}

class Performer extends BaseModel {}

そして、私は s のコレクションを持っていますPerformer:

ArrayList<Performer> list = loadPerformerList();

なぜ私はこれを行うことができないのですか?

functionThatNeedsArrayOfBase( (ArrayList<BaseModel>)list );

または、どうすればそれを適切に行うことができますか?

4

5 に答える 5

1

問題は、ArrayList のタイプ セーフです。このStackOverflow Postで、より詳細な説明をいくつか見つけることができます。要するに、この問題を回避する方法は、メソッドが type のクラスを受け入れるようにすること<? extends/super Performer>です。

于 2012-06-06T19:38:32.283 に答える
1

これが機能しない理由はfunctionThatNeedsAnArrayOfBase()、別の BaseModel サブクラスをリストに追加し、元のリスト参照を破損する可能性があるためです。

詳細な説明のある良い例は、このスタックオーバーフローの質問です。

もう 1 つの参考資料として、Josh Bloch による Essential Java の Generics の記事があります。

于 2012-06-06T19:44:19.670 に答える