teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

付随する話です。目を通していただけると、幸いです。

2016/08/08 11:07

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -32,4 +32,25 @@
32
32
  このように、型情報はコンパイラによって消去されるため、実行時には型情報を取得することはできない。
33
33
 
34
34
  よくわからないのですが、上の例でいうと、Container<Integer>としていても、下のコードのように型パラメータは全てNumberになるのでしょうか。
35
- 回答お願いします。
35
+ 回答お願いします。
36
+
37
+ 補足です。
38
+ コンパイル時には型情報というのは消えてしますようですね。
39
+ しかしながら、例えばインスタンスとして、以下のように呼び出したとします。
40
+
41
+ ```Container<Integer extends Number> c = new Container<>(3);
42
+ System.out.println(c.get());
43
+ ```
44
+
45
+ そうすると、getメソッドの返り値はInteger型になると思います。
46
+ これは呼び出すときに、<Integer extends Number>としているので、JVMが返り値がInteger型であることを認識してくれるからですね。
47
+ ここまでは理解できましたが、そうすると、なぜインスタンスを生成することはできないのでしょうか。
48
+ ```
49
+ class Illegal<T> {
50
+ public T create() {
51
+ return new T();
52
+ }
53
+ }
54
+ ```
55
+ このコードのようにしてインスタンスを生成することはできないというのはなぜでしょうか。
56
+ 呼び出す側できちんと情報はあるはずなので、インスタンスを生成し、返すことは可能だと考えられるのですが。。

1

引用元を示しました。

2016/08/08 11:07

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,6 @@
1
1
  Javaのジェネリクスについて調べていると、以下のような記事を目にしました。
2
2
 
3
- 以下引用です。
3
+ 以下引用です。(http://qiita.com/pebblip/items/1206f866980f2ff91e77)
4
-
5
4
  コンパイル時に型情報は消去される
6
5
  パラメータ化された型や、型パラメータの持つ型情報はコンパイラによって消去される。これは型消去(type erasure)と呼ばれる。
7
6
  例えば、以下の型変数Tを持つジェネリック型を考える。