なかなかに難しい内容ですね。
まずは修正方針が正しいのかを再度検討してみたほうがよいかと思います。
「メインクラス内のgetメソッド・setメソッド・removeメソッドをtry catchで例外処理としていたのですが、それはオーダーではないらしく、ローカルリスト内でメッセージを記述して欲しい。」
に対する解決策として
「ローカルリスト内で例外処理を使わずにエラー表記を出す方法」
というのはあっているでしょうか?
なんとなく出題者の本意にあっていないような気がします。
①質問者様の解釈の通りに実装する
どうがんばってもかなり無理のあるコードになります。
すでに回答にあるSystem#exitを利用すれば確かにプログラムは停止しますが、
逆にいえばこのリストを利用した場合、勝手にプログラムが止まってしまう危険があるということになります。
そんな仕様の部品は怖くて利用できません。
となると、メソッドの呼び出し後に外側でメソッド実行の成否を判定する必要がありますが、
removeは削除した要素を、setは置き換えた値を、getは指定したindexに存在する要素を返すという仕様が定まっているため、
返ってくる値で判定することもできません。
引数に関しても同様に渡すものが決まっているためにうまくいきません。
となると、LocalList内でフラグか何かをもつしかないわけですが、
そんな仕様はListインタフェースには存在しないので
List<String> sub = new LocalList<String>();
といった一般的な宣言ができなくなってしまいます。
②例外クラスにメッセージを埋め込む
「ローカルリスト内でメッセージを記述して欲しい」という言葉から想像するに、
try {
sub.remove(1);
} catch (Exception e) {
System.out.println("対象のインデックスに要素は存在しません。");
}
↑のようなコードを書いていて、
エラーメッセージがリストではなくMainメソッド側に委ねられているのが問題だよってことではないでしょうか。
つまり、どんなエラーが発生したかを通知するのはMainメソッドの責任ではなく、
LocalListの責任ではないかということです。
そうでないと、他の処理でこのリストを使った際にも同じようなメッセージを書かなくてはなりません。
メソッド側に
if (/* もし範囲外アクセスされたら */) {
throw new ArrayIndexOutOfBoundsException("対象のインデックスに要素は存在しません。");
}
としておいて、
try {
sub.remove(1);
} catch (Exception e) {
System.out.println(e.getMessage());
}
みたいにする(もしくは例外出力はStackTraceに任せる)と、
どこで使ってもなぜエラーなのかが分かるようになります。
何かヒントになれば。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/11/27 21:47