継承の原則は、typeパラメーターには適用されません。
List<MultipartFile> files=new ArrayList<MultipartFile>();
=>完全に有効です。
List<MultipartFile> files=new ArrayList<CommonsMultipartFile>();
=>完全に間違っています。
なぜコンパイラはこれをさせないのですか?
を作成すると仮定すると、要素ArrayList<CommonsMultipartFile>
のみを持つことが期待されます。CommonsMultipartFile
そこまで驚くことはありません。
ArrayList
コンパイラがこれを参照型として割り当てることができる場合、拡張しているオブジェクトや!とは異なるオブジェクトList<MultipartFile>
を入力することを妨げるものは何もありません。ArrayList
MultipartFile
CommonsMultipartFile
CommonsMultipartFile
問題は、最初は要素のみを持つことを期待していたことです。
したがって、Java構文では、このような驚きはありません...
さらに、これを行うとprivate List<? extends MultipartFiles> files
機能しますが、私が説明したのと同じ理由で、論理的にいくつかのオブジェクトを追加できなくなります。誤解されることが多いので注意してください。
後でこの参照型を使用してオブジェクトを追加する場合は、? extends
ワイルドカードの代わりに実行することをお勧めします。private List<? super CommonsMultipartFile>
CommonsMultipartFile
とにかく、ArrayList
withCommonMultipartFile
オブジェクトのみを割り当てており、階層の上位にあるオブジェクトは割り当てていないため、この場合の最も適切な構文は次のとおりです。
List<MultipartFile> files=new ArrayList<MultipartFile>();