[Java] オブジェクトをintにキャストする方法


Answers

オブジェクトがIntegerオブジェクトであると仮定すると、これを行うことができます:

int i = ((Integer) obj).intValue();

オブジェクトがIntegerオブジェクトでない場合は、型を検出し、その型に基づいて型を変換する必要があります。

Question

Javaのintにオブジェクトをキャストするにはどうすればよいですか?




例のオブジェクト変数。 hastaId

Object hastaId = session.getAttribute("hastaID");

例については、オブジェクトをint、 hastaIDキャストする

int hastaID=Integer.parseInt(String.valueOf(hastaId));



できません。 intはオブジェクトではなく、プリミティブ型です。 それをIntegerにキャストしてintを取得できます。

 Integer i = (Integer) o; // throws ClassCastException if o.getClass() != Integer.class

 int num = i; //Java 1.5 or higher



Stringをintにキャストすることを意味する場合は、 Integer.valueOf("123")使用しInteger.valueOf("123")

int値を持たないので、他のほとんどのオブジェクトをintにキャストすることはできません。 たとえば、XmlDocumentにint値がありません。




ObjectがもともとIntegerとしてインスタンス化されていた場合は、キャスト演算子(Subtype)を使用してObjectintダウンキャストすることができます。

Object object = new Integer(10);
int i = (Integer) object;

これは、 オートボクシング機能付きで少なくともJava 1.5を使用している場合にのみ機能します。それ以外の場合は、 iIntegerとして宣言してからintValue()を呼び出すintValue()があります。

しかし、最初はIntegerとして作成されていなかった場合、そのようにダウンキャストすることはできません。 その結果、メッセージ内の元のクラス名を持つClassCastExceptionします。 String#valueOf()取得されたオブジェクトのtoString()表現が、構文上有効な整数(必要な場合は数字のみString#valueOf()示している場合、 Integer#valueOf()またはnew Integer()このため。

Object object = "10";
int i = Integer.valueOf(String.valueOf(object));

参照:




回答:

int i = ( Integer ) yourObject;

あなたのオブジェクトが既に整数の場合は、スムーズに実行されます。 すなわち:

Object yourObject = 1;
//  cast here

または

Object yourObject = new Integer(1);
//  cast here

オブジェクトが他のものであれば、可能であればそれをintに変換する必要があります:

String s = "1";
Object yourObject = Integer.parseInt(s);
//  cast here

または

String s = "1";
Object yourObject = Integer.valueOf( s );
//  cast here



int[] getAdminIDList(String tableName, String attributeName, int value) throws SQLException {
    ArrayList list = null;
    Statement statement = conn.createStatement();
    ResultSet result = statement.executeQuery("SELECT admin_id FROM " + tableName + " WHERE " + attributeName + "='" + value + "'");
    while (result.next()) {
        list.add(result.getInt(1));
    }
    statement.close();
    int id[] = new int[list.size()];
    for (int i = 0; i < id.length; i++) {
        try {
            id[i] = ((Integer) list.get(i)).intValue();
        } catch(NullPointerException ne) {
        } catch(ClassCastException ch) {}
    }
    return id;
}
// enter code here

このコードは、なぜArrayListが重要で、なぜそれを使うのかを示しています。 Objectからintをキャストするだけです。 その役に立つかもしれない。




シナリオ1:単純なケース

オブジェクトがIntegerであることが保証されている場合、これは簡単な方法です。

int x = (Integer)yourObject;

シナリオ2:任意の数値オブジェクト

Java Integerでは、 LongBigIntegerなどはすべて、 intValueという名前のメソッドを持つNumberインターフェイスを実装しています。 数値アスペクトを持つ他のカスタムタイプでも、 Number実装する必要があります(例: Age implements Number )。 だからあなたはできる:

int x = ((Number)yourObject).intValue();

シナリオ3:数値テキストを解析する

コマンドライン(またはテキストフィールドなど)からのユーザ入力を受け入れると、それをStringとして取得します。 この場合、 Integer.parseInt(String string)使用できます。

String input = someBuffer.readLine();
int x = Integer.parseInt(input);

Objectとして入力を取得した場合は、 (String)input使用できます。他のテキストタイプを使用できる場合はinput.toString()を使用できます。

int x = Integer.parseInt(input.toString());

シナリオ4:アイデンティティハッシュ

Javaでは、ポインタはありません。 しかし、 Objectは、 System.identityHashCode(Object o)介して直接利用できるhashCode()ためのポインタのようなデフォルト実装を持っています。 だからあなたはできる:

int x = System.identityHashCode(yourObject);

これは実際のポインタ値ではないことに注意してください。 オブジェクトのメモリアドレスは、IDハッシュが維持されている間にJVMによって変更できます。 また、2つの生きているオブジェクトは同じアイデンティティハッシュを持つことができます。

また、 object.hashCode()使用することもできますが、型固有の可能性があります。

シナリオ5:ユニークなインデックス

同じケースでは、データベーステーブル内の自動インクリメントされたID値(ユニークでないアイデンティティハッシュとは異なります)のように、オブジェクトごとにユニークなインデックスが必要です。 このための簡単なサンプル実装:

class ObjectIndexer {

    private int index = 0;

    private Map<Object, Integer> map = new WeakHashMap<>();

    public int indexFor(Object object) {
        if (map.containsKey(object)) {
            return map.get(object);
        } else {
            index++;
            map.put(object, index);
            return index;
        }
    }

}

使用法:

ObjectIndexer indexer = new ObjectIndexer();
int x = indexer.indexFor(yourObject);    // 1
int y = indexer.indexFor(new Object());  // 2
int z = indexer.indexFor(yourObject);    // 1




Links