前提
Javaの初心者です。よろしくお願いします。
Eclipseでコンパイル、実行しています。
問題点
コレクションなどのジェネリクスを実装したクラスを
Java
1List list1 = new ArrayList();
とraw型で用いるとListと**ArrayList()の部分で「型の不一致が起きる可能性があるから総称型にしたほうがいいよ」という警告が出るのは分かるのですが、
以下のコードのようにコンストラクタだけraw型にするとArrayList()**で「型の安全性: 型 ArrayList の式は、未検査の型変換を使用して List<String> に準拠するようにする必要があります」という警告が出ました。
Java
1List<String> list1 = new ArrayList();
2つ目のコードの変数の型は「要素はString型しか扱わないList型」になっているので変数に入るオブジェクトがraw型だったとしても、String型の要素しか扱うことができないため要素を取り出す際に型の不一致が起きる可能性が無いはずです。なぜ2つ目のようなコードでも警告が出るのでしょうか。
また、そもそもArrayList型をList<String>型に代入できること自体おかしいのではないかと思ってしまいました。
自分の考え
以下のようにダウンキャストでList型に代入できるため、後々型の不一致が起こる可能性も考えて警告がでているのではないかと考えました。
Java
1List<String> list1 = new ArrayList(); 2List list2 = list1;
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/03/23 03:53
2020/03/23 05:37
退会済みユーザー
2020/03/23 05:43