ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Java質問&情報提供サイトコミュのArrayListでコンパイル警告が出る。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
皆さん、こんばんは。Procです。何とかSJC-Aをクリアしました。次にSJC-Pを目指して勉強しているのですが、次の文の
コンパイル時に警告が出ます。UserInfoクラスは別のファイルで定義して(UserInfo.java)、同じフォルダに置いてあります。
ArrayIter.javaの中身
-----------------------------------------------
import java.util.*;

public class ArrayIter{)
public static void main(String[] args){

ArrayList list=new ArrayList();
UserInfo ui=null;
list.add(new UserInfo("tanaka",32));
list.add(new UserInfo("watanabe",24));
list.add(new UserInfo("takahashi",28));
list.add(new UserInfo("yamamoto",30));
list.add(new UserInfo("suzuki",35));
System.out.println("-----------------------");
for(int i=0;i<list.size();i++){
ui=(UserInfo)list.get(i);
System.out.println("Name"+ui.getName()+"Age
:"+ui.getAge());
}
}
}
-----------------------------------------------
以上のプログラムを
javac ArrayIter.java
でコンパイルしようとすると
「注:ArrayIter.javaの操作は、未チェックまたは安全でありません。
注:詳細については -Xlint:uncheckedオプションを指定して再コンパイルしてください。」
と出てきてコンパイルできません。

指定のコンパイルオプションをつけてコンパイルすると、
「警告[unchecked]raw型java.util.ArrayListのメンバとしてのadd(E)への無検査呼び出しです。」
が5行出てきます。この警告を何とかしたいのですが、どうしたらよいのでしょう。

コメント(6)

ArrayList<UserInfo> list = new ArrayList<UserInfo>();
とかにしたら直ると思いますが、どこかで既出だったような気もしなくもないですよ。よく覚えてません。
nebaさんの回答で解決しますよ。

原因は、1.5から導入されたジェネリックス(総称)のためです。


ドキュメント見れば、Utilパッケージ下のクラスに
<E>とか<E,V>とか書いてあるかと。

これがあると、nebaさんの書いたように、
>ArrayList<UserInfo> list = new ArrayList<UserInfo>();
とかけて、ArrayListには「UserInfoクラス」かそのサブクラス以外入れることが出来なくなります。

今まではObject型を入れれたので、設計で「UserInfoしか入れてはダメ」と明記して、全員がそれに従うしかなかったのです。
でも、人間失敗するもので、UserInfoしか入れちゃダメなのに、String入れる人もいるかもしれないんですよ。
そういうのは、コンパイル時に見つけることが出来るので、1.5からは、ジェネリックスで指定されているかを調べて、なければ警告+指定があれば、それに違反していないか検出するようになったってことです。


以上長くなりましたが…
こんばんは、レスありがとうございます。ジェネリックスですか。わかりました。ご指摘のようにコードを書いたらコンパイルエラーが無くなりました。ありがとうございます。
つい先日同じ警告が出て悩んだのですが, 私はあきらめました.
でる場所がJakarta Project のcommons のFileUpload!
対応して欲しい...
あ, オープンソースだから自分で対応しろってことかな.
>5
それは確かに、総称を利用するということでは、あきらめるしかないですね。

でも、1.4としてコンパイルしたら問題ないですし(もちろん、1.5〜の機能は全て使えませんが)、警告抑止するだけでしたらアノテーションを使う方法か、コンパイラにコマンド一つ指定してやるだけで済みますよ。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Java質問&情報提供サイト 更新情報

Java質問&情報提供サイトのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング