私はJava(および英語)にまったく慣れていないので、ご容赦ください。
のようなものを書いてみました...
Container con = new Container<Book>();
con.insert(new Book());
con.insert(new Car());
...そして、どのような種類のエラーも発生しませんでした。しかし、次のような行...
Car c = con.remove(); // removes the last inserted element for simplicity
「エラー:互換性のないタイプ」と言ったので、に変更しました
Object carObj = (Car) con.remove();
そしてそれはうまくいきました。私の問題は:私が言うとき
new Container<Book>();
Book 型のオブジェクトのみを保持できるコンテナーを作成しましたが、ポインター (ジェネリックではありませんか?) のおかげで、突然、任意の種類のオブジェクトをコンテナーに配置できてしまいました。ここで何が起こったのですか?ポインターは、コンテナー内にあるオブジェクトのパーソナリティのみを認識しますが、主にジェネリックとして作成されたコンテナー内のオブジェクトのパーソナリティを持つすべてのオブジェクトをポインターが許可することを知りませんでした (私の定式化は間違っている可能性があります)。非ジェネリック ポインターがある場合、ジェネリックまたは非ジェネリックのどちらのコンテナーを作成するかは問題ではありませんか? 常に非ジェネリック コンテナーと見なされます (オブジェクトを削除するときにオブジェクトをキャストする必要があります)。
new Container<Book>().insert(new Car()); // compiler error as excepted
好奇心をそそられ、問題をさらに悪化させました(おそらく)。
Container<Car> cars = new Container();
cars.insert(new Book()); // compiler error: required Car, found Book
これで、ポインターはコンテナー内の車のパーソナリティのみを認識します。しかし、コンテナを非ジェネリックとして作成したにもかかわらず、ブックに入れることはできません。なんで?
new Container().insert(new Car()); // works fine
言わなければならない、それは魅力的であり、刺激的でもあります...