- ★★Java質問・相談スレッド183★★
425 :デフォルトの名無しさん (ワッチョイ ce01-Nz8z)[]:2020/08/02(日) 13:47:16.78 ID:HWQVFDgv0 - >>424
ジェネリクスの配列は作れないんよ >>420 > 自然に、なぜ以下のように書かないのかという疑問が思い浮かびます。 > Stack<String>[] a = (Stack<String>[]) new Object[N]; 実行できないからでしょ Objectの配列をStackの配列にキャストできないから 実行時にObjectになるのはジェネリクスの型であってStackではないです
|
- ★★Java質問・相談スレッド183★★
426 :デフォルトの名無しさん (ワッチョイ ce01-Nz8z)[]:2020/08/02(日) 13:53:28.09 ID:HWQVFDgv0 - > When using generics, Java checks for type safety at compile time,but throws away that information at run time,
ジェネリクスを使うとき Javaはコンパイル時に型の安全性をチェックします しかし、実行時にはその情報を破棄します と、いうことなので ジェネリクスの型が正しいかはコンパイル時にチェックされて 実行時にはジェネリクスの型の情報はありませんよという ジェネリクスの型のイレイジャを説明してるんだと思います
|
- ★★Java質問・相談スレッド183★★
429 :デフォルトの名無しさん (ワッチョイ ce01-Nz8z)[]:2020/08/02(日) 14:42:16.64 ID:HWQVFDgv0 - >>428
> 型の安全性とは、=の左右の型が一致しているということですか? 左右の一致もそうだけどジェネリクスの型が関わるところはすべて Javaは静的型付き言語なので型は実行前に決まるからコンパイルが通ったら 型の不整合は存在しないってこと > 実行時には、型が安全であったかどうかという情報を破棄するというのは、どうしてそうするのですか? イレイジャ方式を採用してるから、なぜイレイジャ方式なのかは過去のものとの互換性のためらしい 詳しくはこのあたりを参照いただければ 贖罪のイレイジャ - プログラマーの脳みそ https://nagise.hatenablog.jp/entry/20160520/1463744926 > なぜ、コンパイル時に行う処理と実行時に行う処理に分けるのですか? イレイジャ方式を採用してるから実行時にキャストが必要になる
|