にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

「〜の操作は、未チェックまたは安全ではありません。」警告の対処方法

ここの練習問題をやっていると、コンパイル時にこんな警告がよく出る。

$ javac jp/co/itboost/stexam/algo/MailRuleExamMain.java
注:./jp/co/itboost/stexam/algo/RuleList.java の操作は、未チェックまたは安全ではありません。
注:詳細については、-Xlint:unchecked オプションを指定して再コンパイルしてください。

自分で解く部分ではないので何度かスルーしたが、気になって調べてみた。

Java 2 SDK バージョン5.0(1.5.0)では,新たに型安全性のための「型チェックの技法」が導入されています。この新しい機能は,従来のJava 2 SDK 1.4.XベースのCollectionsフレームワークの機能と整合しません。

書籍サポート:ひとりでできる Java 実践入門:サポートページ|gihyo.jp … 技術評論社

ということで、どうやら1.4ベースのJavaで作成されたらしい練習問題のコードは、型チェックが合っていないようだ。具体的には以下のようなコードがこれに該当した。

private ArrayList list = new ArrayList();

このArrayListにはRuleという名前のクラスのオブジェクトが格納されるが、この時点では型チェックできないため、取り出すときに以下のようにキャストしなければならなかった。

rule = (Rule)list.get(0);

これを、型チェックのあるJDK 5.0以降の様式に合わせるには、以下のように修正すればよい。

private ArrayList<Rule> list = new ArrayList<Rule>();

こうすることで、listに格納される配列要素はRuleオブジェクトと特定することができる。さらに、利点としては取り出すときに型キャストは必要なくなる。
なので、これからコレクションクラスを利用するときは、ちゃんと型チェックの記述をするようにしましょう。