web-dev-qa-db-ja.com

Objectをintにキャストする方法

JavaでObjectをintにキャストする方法を教えてください。

195
Sheehan Alam

このオブジェクトがIntegerであることが確実な場合は、

int i = (Integer) object;

あるいは、Java 7から始めて、次のように書くこともできます。

int i = (int) object;

注意してください、あなたのオブジェクトが ClassCastException でない場合は Integer 、そうでなければ NullPointerException がスローされます。オブジェクトはnullです。

このようにして、あなたのオブジェクトは整数(ラップされたint)であると仮定し、あなたはそれをintにアンボックスします。

intはプリミティブなので、Objectとして格納することはできません。唯一の方法は、intIntegerと見なして/ボックス化してからObjectとして格納することです。


あなたのオブジェクトがStringであれば、 Integer.valueOf() メソッドを使って単純なintに変換することができます。

int i = Integer.valueOf((String) object);

オブジェクトが実際には整数を内容とするNumberFormatExceptionではない場合、 String をスローすることがあります。


リソース:

同じトピックについて:

350
Colin Hebert

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

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

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

17
Erick Robertson

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

あなたのオブジェクトがIntegerであることが保証されているなら、これは簡単な方法です:

int x = (Integer)yourObject;

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

JavaではIntegerLongBigIntegerなどはすべてNumberという名前のメソッドを持つintValueインターフェースを実装しています。数値アスペクトを持つ他のカスタム型も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にはポインタがありません。しかしObjecthashCode()のためのポインタのようなデフォルト実装を持っていて、それはSystem.identityHashCode(Object o)を通して直接利用可能です。だからあなたはできる:

int x = System.identityHashCode(yourObject);

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

object.hashCode()を使うこともできますが、それは型固有のものにすることができます。

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

同じ場合、データベーステーブルのID値を自動的にインクリメントする場合など、各オブジェクトに一意のインデックスが必要です(一意ではない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

シナリオ6:enumメンバー

Javaでは、enumメンバは整数ではなくフル機能のオブジェクトです(たとえばC/C++とは異なります)。 enumオブジェクトをintに変換する必要はおそらくないでしょうが、Javaは自動的にインデックス番号を各enumメンバに関連付けます。このインデックスはEnum.ordinal()経由でアクセスできます。例えば:

enum Foo { BAR, BAZ, QUX }

// ...

Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1

enter image description here

11
Dávid Horváth
@Deprecated
public static int toInt(Object obj)
{
    if (obj instanceof String)
    {
         return Integer.parseInt((String) obj);
    } else if (obj instanceof Number)
    {
         return ((Number) obj).intValue();
    } else
    {
         String toString = obj.toString();
         if (toString.matches("-?\d+"))
         {
              return Integer.parseInt(toString);
         }
         throw new IllegalArgumentException("This Object doesn't represent an int");
    }
}

お分かりのように、これはそれを行うための非常に効率的な方法ではありません。あなたは単にあなたがどんな種類の物を持っているかを確かめなければならない。それから正しい方法でそれをintに変換します。

11

それをInteger(intのラッパークラス)にキャストする必要があります。その後、IntegerのintValue()メソッドを使用して内部intを取得できます。

4

回答:

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
4
OscarRyz

GSONからのデータを処理するときは、ワンライナーを使用します。

int i = object != null ? Double.valueOf(object.toString()).intValue() : 0;
3
int i = (Integer) object; //Type is Integer.

int i = Integer.parseInt((String)object); //Type is String.
2
Kerem Baydoğan

できません。 intObjectではありません。

IntegerObjectですが、それがあなたの言いたいことではないでしょうか。

2
extraneon

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

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

 int num = i; //Java 1.5 or higher
2
Tom

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

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

これは、少なくともJava 1.5で オートボクシング機能 を使用している場合にのみ機能します。それ以外の場合は、iを次のように宣言する必要があります。代わりにIntegerを使用してからintValue()を呼び出してください

しかし、最初はIntegerとして作成されていなかったのであれば、そのように見下すことはできません。メッセージ内の元のクラス名を持つClassCastExceptionが生成されます。 toString() で得られるオブジェクトの String#valueOf() 表現が構文的に有効な整数を表す場合数値(例:数字のみ、必要に応じて前にマイナス記号を付けて)、そして Integer#valueOf() または new Integer()を使用できます。このため

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

また見なさい:

2
BalusC

CやC++で数値のようにオブジェクトポインタを操作できるのはなぜだろうが、Javaでオブジェクト参照を操作することはできません。

Javaのオブジェクト参照はCやC++のポインタとは異なります。基本的にポインタはの整数であり、他のint型のように操作できます。参照は意図的により具体的な抽象概念であり、ポインタのように操作することはできません。

1
romacafe
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が重要なのか、そしてなぜそれを使うのかを示しています。単にintからObjectをキャストするだけです。その役に立つかもしれません。

Stringをintにキャストするという意味の場合は、Integer.valueOf("123")を使用してください。

ただし、他のほとんどのオブジェクトはintにキャストできません。それらはint値を持たないからです。例えば。 XmlDocumentはint値を持ちません。

1
Amy B

オブジェクト変数の例hastaId

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

例オブジェクトをint型にキャストする、hastaID

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

map.getValue()はオブジェクトタイプを返すので、divide1 = me.getValue()/ 2;

int divide1 =(整数)me.getValue()/ 2;

0
Nehal Pawar

このコードを参照してください。

public class sample 
{
  public static void main(String[] args) 
  {
    Object obj=new Object();
    int a=10,b=0;
    obj=a;
    b=(int)obj;

    System.out.println("Object="+obj+"\nB="+b);
  }
}
0
Vishal Tathe