0
ObjectからListへのキャストを警告なしで実装
publicListfoo[Objectobj]{
return[[List]obj].toArray[];
}
をエラー、警告出さずに実装したいです。
fooメソッドはオーバーライドする必要があるため引数、返り値の型が変えられません。
上記実装ではreturn文中でListにをつけていないため警告が出ています。
if[objinstanceofList]{};
という書き方はできず、エラーになりました。
if[objinstanceofList]{};でくくってもListをパラメタ化していないため、未検査キャストで警告が出てしまいます。
自分で考えた範囲では解決策がでず、結局@SuppressWarnings["unchecked"]
を使ってしまっています。なるべく使いたくはないのですが、何かあんが思いつく方がいらっしゃればご助言よろしくお願いします。
12
回答99807
閲覧12件の回答
0
質問者です。すみません、記述にミスがありました。
publicObject[]foo[Objectobj]{
return[[List]obj].toArray[];
}
です。
0
いくら何でもこれは無理でしょ。
>なるべく使いたくはないのですが、
むしろ、ここで使わなければ、いつ使うんだってなレベルだと思う。
0
未検査キャスト等はユーティリティークラス等にまとめてアノテーションで警告を抑止する。
(各クラスに記述するのは後々メンテナンス的に)
0
いまいち質問の意味がわからないのですが・・
1.オブジェクトを配列に変換するメソッドを作りたい。
2.そのメソッドは継承時オーバーライドされる。
3.入力されるパラメータの型はListである。
4.オーバーライドされたもののパラメータの型はそれではない。
っていう前提の上での質問ですか?
だとすると、fooの中をいくらいじくっても解決しません。設計段階からのミスである気がします。
0
>設計段階からのミスである気がします。
なんでもキレイに書けるわけじゃないよ。
例えば、ObjectInputStream#readObject[]で得たListを、警告なしにどう格納できる。
@SuppressWarnings["unchecked"]publicTcast[Objecto]{return[T]o;}
が一番局所的になる(と思う)。
0
>$さん
私はkkさんの質問の意図を勘違いしているようですね。すみません。
0
連続投稿すみません。
このメソッドの使用者は確実にListを入力するという保証があるということでいいんですよね?
普通にtoArray[T[]a]を使えばいい
publicObject[]foo[Objectobj]{
return[[List]obj].toArray[newString[0]];
}
0
それで、未検査警告が出なくなるの?
0
「未検査警告は」でません。
本来ならListのとT[]が違う型なら
ArrayStoreExceptionという例外としてスローされますが、質問者kkさんの質問に対してはこの回答でいいと思います。
0
return[[List]obj].toArray[newString[0]];
でやるなら。
return[[List]obj].toArray[newObject[0]];
で別の型の配列する場合はjava.lang のパッケージにあるあれを使うでしょ。
>>このメソッドの使用者は確実にListを入力するという保証がある
という前提があるならば。
String[]foo[Listl]... じゃに
0
皆様、回答ありがとうございます。
Rさんの回答を使わせていただき、
publicObject[]foo[Objectobj]{
try{
return[[List]obj].toArray[newString[0]];
}catch[ArrayStoreExceptione]{
...
}
}
で実装することにしました。
objが必ずListである保証があり、本当は引数の型は変えられれば良いのですが、インプリメントしてるインターフェースが外部ライブラリなのでできませんでした。
回答をいただいた皆様、本当にありがとうございました。
0
しかし、そのIF自体の設計がおかしすぎる
Objectを渡すとObjectの配列を戻す?
いったいどんな変人PGがつくったの?
publicObject[]foo[Collectionsc]....
publicObject[]foo[Object[]f]....
ならまだしも。
質問から6ヶ月以上経過しているので、回答を書き込むことはできません。