- PR -

【Type safety】セッションから取り出し時のキャストの警告の扱い

1
投稿者投稿内容
有閑NEET
会議室デビュー日: 2007/08/09
投稿数: 5
投稿日時: 2007-08-20 04:19
JDK6 + Eclipse3.3環境で、StrutsによるWebアプリケーションを開発しています。
セッション等からgetAttribute()する際に、以下のようなコードを書いたところ、

Set<String> xxx = (Set<String>)session.getAttribute("xxx");

以下のようなワーニングがでました。

Type safety: Unchecked cast from Object to Set<String>

このような警告が出ないようにすること(Eclipse3.3の既定の設定で警告がゼロであること)を納品先から要求されています。

どのようにすればよいか、アイデアがありましたら教えてください。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2007-08-20 04:53
手っ取り早くやるなら、メソッドに
コード:

@SuppressWarnings("unchecked")


を記述する方法があります。
ただ、セッション絡みのキャスト以外に対する警告も抑止されてしまう
ので、実行時エラーの要因を残す可能性があるという意味では灰色
な方法です。
納品先への説明ができるのであれば、ユーティリティクラスに引数
がHttpSession、戻り値がSet<String>のstaticメソッドを作り、
意図的にキャスト警告が出るようにして、メソッドコメントで
その意図を説明した方が良いかと。
もちろん、前述のアノテーションタグを設定して完全に警告メッ
セージを抑止することもできます。

※月曜日の明け方に書き込みということは、もしかして納品がかなり迫ってたりして・・・
私は、昨日お酒をしこたま呑んで、たまたま早寝早起きしたためこんな時間に
書き込みをしてます


[ メッセージ編集済み 編集者: 小僧 編集日時 2007-08-20 04:57 ]
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-08-20 10:24
@SuppressWarnings("unchecked") はメソッド全体に効力が及びますからね。
私の場合は安全ではないキャストの部分だけ別のメソッドに切り出しています。
セッションへの出し入れを管理クラスで局所化するようにしていますね。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-08-20 12:24
コード:
public static void main(String[] args) {
	Object obj = ...//どこからか取得;
	Set<String> set = cast(obj);
}

@SuppressWarnings("unchecked")
public static <T> T cast(Object obj){
	return (T) obj;
}


バッドノウハウかもしれませんが・・・
有閑NEET
会議室デビュー日: 2007/08/09
投稿数: 5
投稿日時: 2007-08-20 18:06
皆様ありがとうございます。
結局、Action を継承したAbstractクラスで、かつのり様の例のようなメソッドを書き、
そこに @SuppressWarnings("unchecked") をつけることを、なんとか納品先に了承いただきました。

安易に、警告が出ないことを納品先に請け負ってしまった(口頭ベースですが)ことが問題であったと反省しています。
1

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