- PR -

UnsupportedOperationException

1
投稿者投稿内容
masa
常連さん
会議室デビュー日: 2003/01/14
投稿数: 37
投稿日時: 2003-02-28 14:13
List list = new ArrayList();

として生成したlistにもかかわらず、
addやremoveを行うとたまに”UnsupportedOperationExceptionが送出されます。
たまにというのが気になるのですが、
どなたか理由をご存じの方いたらご教授お願いいたします。
DaikiRyuto
大ベテラン
会議室デビュー日: 2002/07/23
投稿数: 200
投稿日時: 2003-02-28 16:42
これだけではなんとも。
開発環境と実行環境、それに何をadd・removeしているのかくらい記述していただいたほうが良いかと。
masa
常連さん
会議室デビュー日: 2003/01/14
投稿数: 37
投稿日時: 2003-02-28 17:45
失礼しました。

環境は
J2sdk1.4.1
tomcat4.0.6
です。

実際の処理は、

list = new ArrayList();
BufferedReader br = new BufferedReader(new FileReader("ooo.csv"));
String line = null;
while ((line = br.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line, ",");
List record = new ArrayList();
while (st.hasMoreTokens()) {
record.add(st.nextToken());
}
list.add(record);
}
br.close();

のように、CSV形式のファイルを読み込んで、
レコードの各項目(String)をListに格納し、
さらにそのレコード(List)を別のListに格納してCSV形式のファイルを
2次元的なListで表現するような処理を行っています。

UnsupportedOperationExceptionは、
各レコードをあらわすListにたいしてadd,remove を行ったときに発生します。

List record = (List)list.get(recordIndex);
record.add(item); //ここで例外発生

ちょっとわかりにくい説明ですがどうぞよろしくお願いします。
未記入
ぬし
会議室デビュー日: 2002/03/28
投稿数: 255
投稿日時: 2003-02-28 22:24
良く分かりませんが,
どこかでArrayListとは違うクラスを入れてる可能性はないですか.

>List record = (List)list.get(recordIndex);
>record.add(item); //ここで例外発生

ためしに,ここで一度ArrayListにダウンキャストしてみるとか.
#それにしても情報が少ない.Javaならもっと多くの情報が
#取得できると思うのだが....
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2003-03-03 20:39
ちょっと遅い書き込みですが・・・

コンパイルに使っているjavacと、実際に使用しているjavaコマンドのバージョンは同じですか?たまに、パスの順番によってデフォルトでインストールされている古いjavaコマンドが使用されてしまうことがあります。確か、ListはJava2からなので、java1.xなんかを使うと出てきたエラーになってしまうかと。

試しに、"java -version"とコマンドラインに入れて正しいJavaコマンドか確認してください。

また、APIによるとListのaddとremoveはオプショナルメソッドと書いてあるので使用しているJREによってはListをimplementしているクラスが実装していないのかもしれません。(そんなことってあるのかいな?)

[ メッセージ編集済み 編集者: H2 編集日時 2003-03-03 20:45 ]
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2003-03-04 10:47
unibon です。こんにちわ。

引用:

悪夢を統べるものさんの書き込み (2003-02-28 22:24) より:
#それにしても情報が少ない.Javaならもっと多くの情報が
#取得できると思うのだが....


以下、同じことを書いているだけですが、
一応、自分が持っている疑問点を書きますと、
UnsupportedOperationException が発生した時点で
出力されるスタックトレースを見れば、
実行時にどのクラスのインスタンスの、どのメソッド内の、どの行で出たのかまでもが
分かるはずですよね。

また、推測ですが、たとえば、
java.util.Arrays クラスは内部クラスとして、ArrayList クラスを持っていて、
java.util.Arrays.asList の返り値はこのクラスが返ります。
しかし、これは java.util.ArrayList クラスとは別物であり、
たぶん UnsupportedOperationException を返すと思います。
以上は、あくまでもたとえですが、
こういう同名のものと勘違いしているという可能性が考えられますがどうでしょうか。
1

スキルアップ/キャリアアップ(JOB@IT)