例で問題を説明しようとします。X という名前のインターフェースを取得し、X を実装するクラス Y を取得しました。Y のいくつかのインスタンスがリストに収集されます。ここで、私が本当に理解していない点があります。このリストをコレクションに割り当てようとすると、コンパイラ エラーが発生します。それ以外の場合、このリストをコレクションに割り当てると機能します。
List<Y> yList = new ArrayList<Y>();
// works
Collection<? extends X> coll1 = yList;
// error
Collection<X> coll2 = yList;
これら2つのバリアントの違いと、2番目のバリアントが機能しない理由を誰かが説明できますか.