アプリ版:「スタンプのみでお礼する」機能のリリースについて

iアプリのstar言語 (Java拡張言語) の質問です。

if文の条件式に『対象の変数の値がint型なら』という式の書き方を教えてください。

色々調べて試しましたが全部だめでした。
他にiアプリのstarに対応した方法があれば教えてください。



【試した事】

『変数 == 比較対象』を使って比較
『変数.equals(比較対象)メソッド』を使って比較
『変数 instanceof 参照型のクラス』を使って比較
『変数.getClass().getName() == 比較対象』を使って、名前として比較
-------------------------


【実験内容と結果】

int num = 1;

という変数があるのを前提としています。

-------------------------
■『変数 == 比較対象』を使って比較
if(num == int)

↓エラーメッセージ↓
'.class' がありません。
if(num == int){
^
-------------------------
■『変数.equals(比較対象)メソッド』を使って比較
if(num.equals(int))

↓エラーメッセージ↓
'.class' がありません。
if(num.equals(int)){
^
-------------------------
■『変数 instanceof 参照型のクラス』を使って比較
if(num instanceof int)

↓エラーメッセージ↓
予期しない型
検出値 : int
期待値 : 参照
if(num instanceof int){
^

予期しない型
検出値 : int
期待値 : クラスまたは配列
if(num instanceof int){
^
-------------------------
■『変数.getClass().getName() == 比較対象』を使って、名前として比較
if(num.getClass().getName() == "int")

↓エラーメッセージ↓
int は間接参照できません。
if(num.getClass().getName() == "int"){
^
-------------------------

検証の結果、『int』はプリミティブ型であり、クラスでは無いので比較対象として成立しない、という事らしいです。
つまり、プリミティブ型の値が代入された変数の型を検出する方法が知りたいのです。
よろしくおねがいします。

A 回答 (1件)

star自体には詳しくないんですが、Javaで考えると


intで宣言した変数には基本的にintしか入りません。
int numと宣言すれば、その有効範囲内なら、numは常にintです。

コンパイルの時点で決まり、実行中は変化しません。
よって、実行時の状況に応じて判定する必要など無いと思うのですが。


判定を必要とするのは、Object型とか、ジェネリクスを使ったときとかしか思い浮びませんが、どちらもプリミティブではないのでinstanceof等を使って判定ができるはずです。


何がしたいのでしょうか?

この回答への補足

ご回答ありがとうございます。

何がしたいかというと、ご指摘の通りですが、Object型を引数にとるメソッドにintを指定して呼び出してから、内部処理で、
『数値なら~』、『nullなら~』、など処理を分岐させたいんです。

エラーにならない書き方を教えてください。


↓具体的には、こんな感じです。↓


public void test(Object obj){

if(objが数値なら){
//処理
}else if(objがnullなら){
//処理
}

}

------------------------------

test(1);

------------------------------
としたいのですが、エラーが2つ。

■Object型の引数にintを指定できないエラー。
test(java.lang.Object) (SceneMainGame 内) を (int) に適用できません

------------------------------

■instanceofの右側に、『int』を指定できないエラー。
予期しない型
検出値 : int
期待値 : クラスまたは配列
------------------------------

補足日時:2011/03/15 23:13
    • good
    • 0
この回答へのお礼

すみません自己解決しました。
こうする事にしました。


test( new Integer(50) );



public void test(Object obj){

if(obj instanceof Integer){

Integer num = (Integer)obj;

System.out.println(num.intValue());

}

お礼日時:2011/03/15 23:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!