どのように私はJavaでintからlongに変換するのですか?
-
19-09-2019 - |
質問
私は周りに他の方法をlong
していないためにint
から行くのトラブルを抱えてここやGoogleの人々の両方を見つけておきます。しかし、私は私がint
にLong
から行く前に、このシナリオに遭遇しただけではないんだと確信しています。
私が見つけた唯一の他の回答は本当に問題に対処していない「ちょうど最初の場所でロングとして設定」してます。
私が最初にキャストしてみましたが、私は「Cannot cast from int to Long
」を取得
for (int i = 0; i < myArrayList.size(); ++i ) {
content = new Content();
content.setDescription(myArrayList.get(i));
content.setSequence((Long) i);
session.save(content);
}
あなたは、私は少し困惑してる想像できるように、一部のコンテンツがint
として来ていると私はこの情報を保存していたために実体がロングとしてシーケンス番号を必要とするため、、私はArrayList
を使用してこだわっています。
解決
long
するキャストとLong
へのキャストとの間に差があることに注意してください。あなたは(プリミティブ値)をlong
にキャストした場合、それは自動的にLong
(それをラップ参照型)に箱詰めされなければならない。
あなたは、代わりnew
値で初期化、Long
のインスタンスを作成するためにint
を使用することができます。
他のヒント
次を使用します。 Long.valueOf(int);
でます。
あなたはこれを行うことができます
Integer y = 1;
long x = y.longValue();
タグ
使用
new Long(your_integer);
または
Long.valueOf(your_integer);
私はまた、非ジェネリックインターフェイスを扱うこの小さなおもちゃを、持っています。 私は(OKと幸せ)間違ったフィードあれば、それはClassCastExceptionが投げてOKです。
public class TypeUtil {
public static long castToLong(Object o) {
Number n = (Number) o;
return n.longValue();
}
}
Javaでは、あなたが行うことができます:
int myInt=4;
Long myLong= new Long(myInt);
あなたのケースでは、それは次のようになります:
content.setSequence(new Long(i));
私たちはNumber
の参照を使用してlong値を取得するものとします。
public static long toLong(Number number){
return number.longValue();
}
これは、すべての数値型のために働く、ここでテストされます:
public static void testToLong() throws Exception {
assertEquals(0l, toLong(0)); // an int
assertEquals(0l, toLong((short)0)); // a short
assertEquals(0l, toLong(0l)); // a long
assertEquals(0l, toLong((long) 0)); // another long
assertEquals(0l, toLong(0.0f)); // a float
assertEquals(0l, toLong(0.0)); // a double
}
どのように
についてint myInt = 88;
//コンパイルされません。
Long myLong = myInt;
//コンパイルし、int型の非NULLの精神を維持しています。最高ののキャストのすべてのの一切のキャストのではありません。もちろん、あなたのユースケースは、ロングと可能なNULL値が必要な場合があります。 int型、または他の憧れるがあなただけの入力で、あなたの方法を変更することができるなら、私はこのアプローチをお勧めします。
long myLong = myInt;
//コンパイルは、最も効率的な方法であり、それは明確に、ソース値であり、NULLになることはありませんということになります。
Long myLong = (long) myInt;
1,new Long(intValue);
2,Long.valueOf(intValue);
私はこれとのトラブルの多くを持っていました。
:私はしたかったですthisBill.IntervalCount = jPaidCountSpinner.getValue();
どこIntervalCountが長く、JSpinnerのは、ロングを返すように設定しました。結局私は、この関数を記述する必要がありました。
public static final Long getLong(Object obj) throws IllegalArgumentException {
Long rv;
if((obj.getClass() == Integer.class) || (obj.getClass() == Long.class) || (obj.getClass() == Double.class)) {
rv = Long.parseLong(obj.toString());
}
else if((obj.getClass() == int.class) || (obj.getClass() == long.class) || (obj.getClass() == double.class)) {
rv = (Long) obj;
}
else if(obj.getClass() == String.class) {
rv = Long.parseLong(obj.toString());
}
else {
throw new IllegalArgumentException("getLong: type " + obj.getClass() + " = \"" + obj.toString() + "\" unaccounted for");
}
return rv;
}
これはトリックを行うようです。シンプルな鋳造のいかなる量は、上記の解決策のどれも私のために働いていません。非常にイライラます。
//Suppose you have int and you wan to convert it to Long
int i=78;
//convert to Long
Long l=Long.valueOf(i)
とすぐ唯一の方法のLong.valueOf(long)
があるとして、int
へlong
からキャストはLong.valueOf(intValue)
を使用した場合には暗黙的に行われます。
これを行うために、より明確な方法がある。
Integer.valueOf(intValue).longValue()