私はこことGoogleの人々の両方がlong
からint
へ行くのに苦労していて、その逆ではないことを発見し続けています。 int
からLong
に移行するまでに、このシナリオに遭遇したのは私だけではないと確信しています。
私が見つけた他の唯一の答えは、実際には質問に対処していない「そもそも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);
。
あなたがすでに整数として型付けされたintを持っているなら、あなたはこれをすることができる:
Integer y = 1;
long x = y.longValue();
つかいます
new Long(your_integer);
または
Long.valueOf(your_integer);
私はこの小さなおもちゃを持っています。それはまた非汎用インターフェースも扱います。フィードが間違っているとClassCastExceptionがスローされるので問題ありません。
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));
どうですか
int myInt = 88;
//コンパイルしません
Long myLong = myInt;
// NULL以外のintの精神をコンパイルして保持します。最良のキャストは、キャストなしです。もちろん、あなたのユースケースはLongと可能なNULL値を必要とするかもしれません。しかし、intや他のlongがあなたの唯一の入力であり、そしてあなたのメソッドが修正されることができるならば、私はこのアプローチを提案するでしょう。
long myLong = myInt;
//コンパイルし、これが最も効率的な方法であり、ソース値がNULLであること、そしてそうなることはないことを明確にします。
Long myLong = (long) myInt;
1,new Long(intValue);
2,Long.valueOf(intValue);
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
}
//Suppose you have int and you wan to convert it to Long
int i=78;
//convert to Long
Long l=Long.valueOf(i)
私はこれでたくさんの問題を抱えていました。私はただしたかった:
thisBill.IntervalCount = jPaidCountSpinner.getValue();
IntervalCountがLongで、JSpinnerがLongを返すように設定されている場合。結局、私はこの関数を書かなければなりませんでした:
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;
}
これはトリックをするようです。単純なキャスティングではなく、上記の解決策のどれも私にとってうまくいきませんでした。非常にイライラする。
メソッドLong.valueOf(long)
のみが存在するとすぐに、Long.valueOf(intValue)
を使用する場合、int
からlong
へのキャストは暗黙的に行われます。
これを行うためのより明確な方法は
Integer.valueOf(intValue).longValue()