*警告:[unchecked] raw 型 java.util.ArrayList のメンバとしての add(E) への無検査呼び出しです

DeleteStockData.java:81: 警告:[unchecked] raw 型 java.util.ArrayList のメンバとしての add(E) への無検査呼び出しです。
                        errorMessages.add("指定されたディレクトリが存在しません。存在するディレクトリを指定してください。");
DeleteStockData.java:90: 警告:[unchecked] raw 型 java.util.ArrayList のメンバとしての add(E) への無検査呼び出しです。
                        errorMessages.add("本日からの範囲を日数で指定してください。日数は半角数字のみで自然数のみを入力してください。");
DeleteStockData.java:98: 警告:[unchecked] raw 型 java.util.ArrayList のメンバとしての <T>toArray(T[]) への無検査呼び出しです。
        this.errorMessage_ = (String[])errorMessages.toArray(new String[0]);

「無検査呼び出し」とは何か

JDK 5.0のクラス・ライブラリに含まれる List はジェネリックな List なので、要素の型が指定されていないプログラムをコンパイルすると、上記のような「無検査呼び出し」という警告が出る。
この警告は、型の安全性が保証されていないという意味だ。この警告が出る部分を Generics に対応させていけば、型に関して安全なプログラムに改良することができる。

http://www.itarchitect.jp/technology_and_programming/-/18161-6.html

要するに、Java 1.5 以降に実装された仕様のひとつである。
Java 1.5 以前では、動的に変更できる配列に代入される値の型を指定しなくても、問題なく利用できていた。しかし、型の安全性を保障するために、明示的に型を指定するという仕様に変更された。

エラーが出たソース

private Boolean validateArguments(String[] args) {
    Boolean isValidation = true;
    ArrayList errorMessages = new ArrayList();
    for (int i = 0; i < args.length; i++) {
        switch (i) {
            case 0:
                File is_dir = new File(args[i]);
                if (is_dir.exists() == false) {
                    isValidation = false;
                    errorMessages.add("指定されたディレクトリが存在しません。存在するディレクトリを指定してください。");
                }
                break;
            case 1:
                Pattern pattern = Pattern.compile("^[0-9]{1,}$");
                Matcher matcher = pattern.matcher(args[i]);
                Boolean isMatch = matcher.matches();
                if (isMatch == false) {
                    isValidation = false;
                    errorMessages.add("本日からの範囲を日数で指定してください。日数は半角数字のみで自然数のみを入力してください。");
                }
                break;
            default:
                break;
        }
    }
    this.errorMessage_ = (String[])errorMessages.toArray(new String[0]);
    return isValidation;
}

修正後のソース

private Boolean validateArguments(String[] args) {
    Boolean isValidation = true;
    ArrayList<String> errorMessages = new ArrayList<String>();
    for (int i = 0; i < args.length; i++) {
        switch (i) {
            case 0:
                File is_dir = new File(args[i]);
                if (is_dir.exists() == false) {
                    isValidation = false;
                    errorMessages.add("指定されたディレクトリが存在しません。存在するディレクトリを指定してください。");
                }
                break;
            case 1:
                Pattern pattern = Pattern.compile("^[0-9]{1,}$");
                Matcher matcher = pattern.matcher(args[i]);
                Boolean isMatch = matcher.matches();
                if (isMatch == false) {
                    isValidation = false;
                    errorMessages.add("本日からの範囲を日数で指定してください。日数は半角数字のみで自然数のみを入力してください。");
                }
                break;
            default:
                break;
        }
    }
    this.errorMessage_ = errorMessages.toArray(new String[0]);
    return isValidation;
}

変更点の比較

// 3行目。
// 修正前。
    ArrayList errorMessages = new ArrayList();
// 修正後。型宣言の直後に代入される値の型を明示する。
    ArrayList<String> errorMessages = new ArrayList<String>();
// 27行目。
// 修正前。
    this.errorMessage_ = (String[])errorMessages.toArray(new String[0]);
// 修正後。型キャストを削除する。
    this.errorMessage_ = errorMessages.toArray(new String[0]);