- - PR -
Generics の Cast について
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-05-18 17:07
お世話になります
eclipse で、テストコードを書いていますが、標題の件で悩んでいます どなたか解決法をご存じでしたら教えていただけないでしょうか? 以下の様なコードとします
そうしますと、map に対する代入のところで、以下の様なwarningが出てしまいます 「Type safety: The cast from Object to Map<String, GUILibraryDefinition> is actually checking against the erased type Map」 いろいろ記述を試してみましたが、単なるGenericsのないCastだと通りますが、 できればGenericsを使用したく、そうするとどうにもwarningが消えません よろしくお願いします | ||||||||||||
|
投稿日時: 2005-05-18 18:33
何をしたいプログラムなのか、よくわからないです。
getObject()とgetField()がありますが、これはどういうメソッドですか? Mapには何と何を格納したいのでしょうか? もし、フィールド名とフィールドの値ならば、こんな感じになると思いますが?
| ||||||||||||
|
投稿日時: 2005-05-18 18:55
a-san、返答ありがとうございます
| getObject()とgetField()がありますが、これはどういうメソッドですか? 説明不足で失礼しました これらのコードは、テスト用のコードで(JUnitを使っています) getField()は、Refrectionを使って汎用的に、対象クラスインスタンスの フィールド変数の内容を取得するようにしています それで汎用的に Object の型で受け取る戻り値を、必要な変数へ キャストしているのですが、パラメータを 2 つ使う型に限って Warning が出て悩んでいるところです a-sanが示していただいたコードですが、「new Map<String, Object>();」 のところで以下のようなエラーになってしまいます Cannot instantiate the type Map<String,GUILibraryDefinition> 根本的に私が勘違いしているのでしょうか? | ||||||||||||
|
投稿日時: 2005-05-18 19:11
まず、実行時にはパラメータとして渡す型の情報は消えてしまっているはずですから、実行時の キャストはできないでしょう。ですので、このようなコードを書くのはあきらめてください。 #でもこれって警告なのでコンパイルそのものはできるのでは?
Mapはインタフェースなのでインスタンス化できませんね ![]() | ||||||||||||
|
投稿日時: 2005-05-18 19:30
ukさん、返答ありがとうございます
そうですか... Javaは初心者なのでよくわかっていませんが、汎用的なメソッドで対応できないのは残念です 個別に型毎に変換メソッドを作って対応しないといけませんね
はい、動作はするのですが、Warning の黄色いフラグも消そうと思って投稿しました
失礼しました、でもやはりインタフェースだから汎用的にしたいなぁ... (HashMap ではあるんですが) | ||||||||||||
|
投稿日時: 2005-05-18 19:34
興味があれば、以下のGenerics Tutorialを読んでみてください。 http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf 「7.2 Casts and Instanceof」にその辺の情報が書いてあります。 | ||||||||||||
|
投稿日時: 2005-05-18 19:46
ありがとうございます
ちょっと読んでみます |
1