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