- ★★Java質問・相談スレッド183★★
420 :デフォルトの名無しさん (ワッチョイ fa55-xE3T)[]:2020/08/02(日) 12:36:44.63 ID:hOgQnHyE0 - Robert Segewick and Kevin Wayne著『Algorithms 4th Edition』では、ジェネリクスを使って、スタックを実装しています。
文字列のスタックの配列を作る時には、以下のように書かなければならないと書いてあります。 Stack<String>[] a = (Stack<String>[]) new Stack[N]; 一方、Itemが型パラメータであるとき、Item型の配列を作るには、以下のように書かなければならないと書いてあります。 a = (Item[]) new Object[cap]; 自然に、なぜ以下のように書かないのかという疑問が思い浮かびます。 Stack<String>[] a = (Stack<String>[]) new Object[N]; こう書かない理由が以下のように書かれていますが、これが何を言っているのか分かりません。 You might have expected to use Object instead of Stack. When using generics, Java checks for type safety at compile time, but throws away that information at run time, so it is left with Stack<Object>[] or just Stack[], for short, which we must cast to Stack<String>[]. 何を言っているのでしょうか?
|
- ★★Java質問・相談スレッド183★★
421 :デフォルトの名無しさん (ワッチョイ fa55-xE3T)[]:2020/08/02(日) 12:39:17.55 ID:hOgQnHyE0 - 特に、
When using generics, Java checks for type safety at compile time,but throws away that information at run time, の意味が分かりません。
|
- ★★Java質問・相談スレッド183★★
422 :デフォルトの名無しさん (ワッチョイ fa55-xE3T)[]:2020/08/02(日) 12:41:56.68 ID:hOgQnHyE0 - ちなみに、
type safetyとは何か知りませんし、 at compile timeとat run timeというタイミングの違いによってどういう影響があるのかも分かりません。
|
- ★★Java質問・相談スレッド183★★
428 :デフォルトの名無しさん (ワッチョイ fa55-xE3T)[sage]:2020/08/02(日) 14:07:22.33 ID:hOgQnHyE0 - >>426
型の安全性とは、=の左右の型が一致しているということですか? 実行時には、型が安全であったかどうかという情報を破棄するというのは、どうしてそうするのですか? なぜ、コンパイル時に行う処理と実行時に行う処理に分けるのですか?
|
- ★★Java質問・相談スレッド183★★
430 :デフォルトの名無しさん (ワッチョイ fa55-xE3T)[sage]:2020/08/02(日) 14:53:18.78 ID:hOgQnHyE0 - >>429
ありがとうございました。
|