質問編集履歴
2
付随する話です。目を通していただけると、幸いです。
test
CHANGED
File without changes
|
test
CHANGED
@@ -67,3 +67,45 @@
|
|
67
67
|
よくわからないのですが、上の例でいうと、Container<Integer>としていても、下のコードのように型パラメータは全てNumberになるのでしょうか。
|
68
68
|
|
69
69
|
回答お願いします。
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
補足です。
|
74
|
+
|
75
|
+
コンパイル時には型情報というのは消えてしますようですね。
|
76
|
+
|
77
|
+
しかしながら、例えばインスタンスとして、以下のように呼び出したとします。
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
```Container<Integer extends Number> c = new Container<>(3);
|
82
|
+
|
83
|
+
System.out.println(c.get());
|
84
|
+
|
85
|
+
```
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
そうすると、getメソッドの返り値はInteger型になると思います。
|
90
|
+
|
91
|
+
これは呼び出すときに、<Integer extends Number>としているので、JVMが返り値がInteger型であることを認識してくれるからですね。
|
92
|
+
|
93
|
+
ここまでは理解できましたが、そうすると、なぜインスタンスを生成することはできないのでしょうか。
|
94
|
+
|
95
|
+
```
|
96
|
+
|
97
|
+
class Illegal<T> {
|
98
|
+
|
99
|
+
public T create() {
|
100
|
+
|
101
|
+
return new T();
|
102
|
+
|
103
|
+
}
|
104
|
+
|
105
|
+
}
|
106
|
+
|
107
|
+
```
|
108
|
+
|
109
|
+
このコードのようにしてインスタンスを生成することはできないというのはなぜでしょうか。
|
110
|
+
|
111
|
+
呼び出す側できちんと情報はあるはずなので、インスタンスを生成し、返すことは可能だと考えられるのですが。。
|
1
引用元を示しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,9 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
以下引用です。
|
5
|
+
以下引用です。(http://qiita.com/pebblip/items/1206f866980f2ff91e77)
|
6
|
-
|
7
|
-
|
8
6
|
|
9
7
|
コンパイル時に型情報は消去される
|
10
8
|
|