- - PR -
型変換について
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-15 17:51
こんばんわ。
いつもお世話になっております。 型変換について、ご教授願います。m(_ _)m ひとつの関連するデータのグループがあるのですが、 そのデータ群は色々なデータ型(String、int、Long、Booleanなど) で存在しています。 そのデータグループを1つのデータグループとして配列に 格納して、まとめて持っておきたいのですが、 例えば、Object配列に値を格納しようとすると、 intやLongでは、キャストが出来ないため、格納することができません。 全ての親クラスであるObjectなら、型が違っても値を 格納できる(キャストできる)と思っていたのですが・・・。 なぜ、キャストできないのでしょうか・・・。 そして、なぜStringだけキャストできるのでしょうか。 基礎的なことで申し訳ありませんが、 どなたか、ご教授いただけないでしょうか。 | ||||||||||||
|
投稿日時: 2005-11-15 18:04
コレクションじゃダメなんですかね?
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-11-15 18:05
オブジェクトラッパー型にキャストすればいいはず
tigerからは暗黙キャストされますが OracleSQLパズル http://oraclesqlpuzzle.hp.infoseek.co.jp [ メッセージ編集済み 編集者: 明智重蔵 編集日時 2005-11-15 18:11 ] | ||||||||||||
|
投稿日時: 2005-11-15 18:08
intは不可能ですが、Longだったらキャスト可能ですよね。 longだったら、intと同様、不可能です。
結論を言ってしまうと、数値リテラルはオブジェクトではないからです。 Wrapperクラスでラップすると、可能になります。 intとIntegr、longとLongの違い、「Wrapprerクラス」などを調べてみてください。 | ||||||||||||
|
投稿日時: 2005-11-15 18:19
こんばんは。
とりあえず、プリミティブ型と参照型の区別をしましょう。 JDK5では、「オートボクシング・アンボクシング」機能があるので、 そういうキャストの問題は解消されるでしょう。 | ||||||||||||
|
投稿日時: 2005-11-15 18:41
じゃんぬねっとさん、ご返信ありがとうございました。 java.util系の配列オブジェクトへの代入も考えたのですが、 putやaddで代入する型がObject型なので、 結果的に、object配列に代入するのと同じになってしまいました。 ・・・もしかして、根本的に間違っていますでしょうか・・・。 | ||||||||||||
|
投稿日時: 2005-11-15 18:42
明智重蔵さん、ご返信ありがとうございました。 明智さんがおっしゃっているのは、 ↓のようなことでしょうか? Object[] test = null; String s = "aaa"; int i = 1; long l = 2; test[0] = s; test[1] = (Integer) i; | ||||||||||||
|
投稿日時: 2005-11-15 18:45
Edossonさんご返信ありがとうございます。 int i = null; Integer in = null; とeclipseで記述してみたところ、 int i = null; はエラーになりました。 プリミティブ型が数値でもオブジェクト扱いしているからですよね。 しかし、明智重蔵さんへの返信に書きましたとおり、 プリミティブ型にキャストすると、コンパイルエラーになってしまうのです・・・。 |