Javaでオブジェクトをintにキャストするにはどうすればよいですか?
intValue
)、列挙型のコンストラクターを作成して列挙型を設定しintValue
、列挙型定数でそのコンストラクターを呼び出し、ゲッターを追加しますのためにintValue
。次に、キャストする代わりに、ゲッターを呼び出します。
Javaでオブジェクトをintにキャストするにはどうすればよいですか?
intValue
)、列挙型のコンストラクターを作成して列挙型を設定しintValue
、列挙型定数でそのコンストラクターを呼び出し、ゲッターを追加しますのためにintValue
。次に、キャストする代わりに、ゲッターを呼び出します。
回答:
このオブジェクトが確実である場合Integer
:
int i = (Integer) object;
または、Java 7以降では、次のように書くこともできます。
int i = (int) object;
注意してください、それはClassCastException
あなたのオブジェクトがでないなら、Integer
そしてあなたのオブジェクトがであるなら、を投げることができNullPointerException
ますnull
。
このようにして、オブジェクトが整数(ラップされたint)であると想定し、ボックス化してintにします。
int
はプリミティブであるためObject
、として格納できません。唯一の方法は、int
検討/ボックス化Integer
されたをとして格納し、として格納することObject
です。
オブジェクトがの場合String
、Integer.valueOf()
メソッドを使用して、オブジェクトを単純なintに変換できます。
int i = Integer.valueOf((String) object);
NumberFormatException
オブジェクトが実際にString
整数をコンテンツとして持たない場合は、をスローできます。
リソース:
同じトピックについて:
NullPointerException
アンボクシングの間に起こるであろうInteger
にint
オブジェクトがオブジェクトであると仮定すると、Integer
これを行うことができます:
int i =((Integer)obj).intValue();
オブジェクトがオブジェクトでない場合はInteger
、型を検出し、その型に基づいて変換する必要があります。
intValue
オートボクシングのために呼び出す必要はありません。
intValue
は、int
と交換可能であるという初心者の混乱を特に考慮すると、はるかに明確になりInteger
ます。
オブジェクトがであることが保証されている場合Integer
、これは簡単な方法です。
int x = (Integer)yourObject;
Java Integer
ではLong
、BigInteger
などすべてNumber
がというメソッドを持つインターフェースを実装しますintValue
。数値アスペクトを持つ他のカスタムタイプも実装する必要がありますNumber
(例:)Age implements Number
。だからあなたはできる:
int x = ((Number)yourObject).intValue();
コマンドライン(またはテキストフィールドなど)からのユーザー入力を受け入れると、それはとして取得されます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());
Javaではポインタはありません。ただし、Object
にはポインタのようなデフォルト実装がありhashCode()
、これはから直接利用できますSystem.identityHashCode(Object o)
。だからあなたはできる:
int x = System.identityHashCode(yourObject);
これは実際のポインタ値ではないことに注意してください。オブジェクトのメモリアドレスは、IDハッシュが維持されている間、JVMによって変更できます。また、2つの生きているオブジェクトが同じIDハッシュを持つことができます。
も使用object.hashCode()
できますが、タイプ固有にすることもできます。
同じ場合に、データベーステーブルの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
Javaの列挙型メンバーは整数ではなく、フル機能のオブジェクトです(たとえば、C / C ++とは異なります)。おそらくenumオブジェクトをに変換する必要はありませんが、int
Javaはインデックス番号を各enumメンバーに自動的に関連付けます。このインデックスにはEnum.ordinal()
、たとえばを介してアクセスできます。
enum Foo { BAR, BAZ, QUX }
// ...
Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1
@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に変換します。
Integer(intのラッパークラス)にキャストする必要があります。次に、IntegerのintValue()メソッドを使用して、内部のintを取得できます。
回答:
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
GSONからのデータを処理するときに、ワンライナーを使用します。
int i = object != null ? Double.valueOf(object.toString()).intValue() : 0;
Object
がもともととしてインスタンス化されていた場合は、キャスト演算子を使用してにInteger
ダウンキャストできます。int
(Subtype)
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));
できません。int
それはプリミティブ型ですが、オブジェクトではありません。それをIntegerにキャストしてから、intを取得できます。
Integer i = (Integer) o; // throws ClassCastException if o.getClass() != Integer.class
int num = i; //Java 1.5 or higher
できません。アンはint
ありませんObject
。
Integer
とはObject
いえ、それがあなたの言いたいことだとは思いません。
Stringをintにキャストする場合は、を使用してくださいInteger.valueOf("123")
。
ただし、他のほとんどのオブジェクトはint値にキャストできないため、intにキャストすることはできません。たとえば、XmlDocumentにはint値がありません。
Integer.valueOf("123")
、必要なものがプリミティブである場合は使用しないでください。Integer.parseInt("123")
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
ます。役に立つかもしれません。
オブジェクト変数の例。 hastaId
Object hastaId = session.getAttribute("hastaID");
たとえば、オブジェクトをintにキャストします。hastaID
int hastaID=Integer.parseInt(String.valueOf(hastaId));
so divide1=me.getValue()/2;
int divide1 = (Integer) me.getValue()/2;
最後に、仕様に最適な実装が見つかりました。
public int tellMyNumber(Object any) {
return 42;
}
まずinstanceofキーワードで確認します。trueの場合はキャストします。
Object
がでない場合、Integer
キャストに何を期待しているのかわかりません。