人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

JAVAについて質問です。Object型にString型をセットしReturnするコーディングがあったのでそれを参考にし、以下のようなコーディングを作成しました。
Object 関数名(int iCase){
Object[] oReturnValue=new Object[2];
oReturnValue[0]=intの変数;
oReturnValue[1]=CStringの変数;
return oReturnValue[iCase];
}
int iTest=(int)関数名(0);

オブジェクトにStringが入るんだからintも設定できるだろう
とかんがえました。この関数内一応コーディングの段階でエラー表示にはならなかったのですが、
呼び出しているほうでエラー表示になってしまいます。
なぜでしょうか?アドバイスいただきたくよろしくお願いします。



●質問者: harunoharuno
●カテゴリ:コンピュータ
✍キーワード:Java object String しR アドバイス
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● tomo_k
●100ポイント

intはオブジェクトではないからです。

プリミティブ型であるのでObjectには入れられません。

Javaのすべてのオブジェクトはjava.lang.Objectというクラスを継承しているからあらゆるオブジェクトを代入できるのであって、オブジェクトですらないintをだいにゅうすることは不可能です。

もし、Objectに入れたければIntegerというクラスを使うとよいでしょう。ただし、普通に数値計算するにはintに戻さなければならないなど扱いが面倒だと思います。

http://www.itarchitect.jp/beginners/-/26001.html


2 ● b-wind
●100ポイント

オブジェクトにStringが入るんだからintも設定できるだろう

昔からの Java2 では String は Object を継承したクラスですが、

int は組み込み型です。Object の配列に代入することは出来ません。


実行環境が J2SE 1.5 以降なら、autoboxing と言う機能で

自動的に Integer に変換されますので実行は出来ますが、あくまで int が

入っているわけではありません。

【コラム】ライトニングJava (2) Autoboxing/Unboxing(1) - プリミティブ型をコレクションフレームワークで | エンタープライズ | マイコミジャーナル


3 ● KUROX
●50ポイント

intはオブジェクトではないのです。だから、Integerとかに変換して格納するのが普通です。

http://q.hatena.ne.jp/answer


4 ● quintia
●200ポイント ベストアンサー

エラーになる理由はすでにある回答の通りでいいと思いますが……


oReturnValue[0]=intの変数;

の部分で、これをコンパイラに、

oReturnValue[0]=new Integer(intの変数);

と解釈させるのはさほど難しいことではないです。(すでに出ているとおり autoboxing と呼びます)


しかし、

Object o;

(略)

int a = o;

となった時に最後の行を、

int a = ((Integer)o).intValue();

とコンパイラが自動で変換してよいか? という判断で、言語設計としてこれはまずいだろう、となったのでしょう。

つまり、

自動的な処理として「プログラマの意図を超えた」動作ではないか。

別の意図で書かれた(つまりバグが入り込んでいる)ソースであるケースの方が可能性が高いのではないか。

だとしたらコンパイルでエラーとするべきではないか。

と判断されたのだと思います。


これが、

Integer o;

(略)

int a = o;

であれば、まぁいいだろう、とする(o.intValue() と解釈してコンパイルする)のが auto-unboxing の考え方ですね。


ご質問のソースであれば、

int iTest=(Integer)関数名(0);

と書いてやると auto-unboxing が利いて

int iTest=((Integer)関数名(0)).intValue();

の様にコンパイルされるでしょう。

しかし明にキャストしなければならないぐらいであれば、auto-unboxing に頼らない様なソースコードにするべきだと感じます。(auto-unboxing する/しないの線引きも、その辺にあると考えます。)


ダミーURL

http://www.theserverside.com/news/thread.tss?thread_id=24477

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ