web-dev-qa-db-ja.com

整数から長整数への変換

リフレクションを使用してフィールドの値を取得する必要があります。そのため、フィールドのデータ型が何であるかが常にわからないことがあります。そのため、またコードの重複を避けるために、次のメソッドを作成しました。

@SuppressWarnings("unchecked")
private static <T> T getValueByReflection(VarInfo var, Class<?> classUnderTest, Object runtimeInstance) throws Throwable {
  Field f = classUnderTest.getDeclaredField(processFieldName(var));
  f.setAccessible(true);
  T value = (T) f.get(runtimeInstance);

  return value;
}

そして、このメソッドを次のように使用します。

Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);

または

Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance);

問題は、IntegerLongにキャストできないように見えることです。

Java.lang.ClassCastException: Java.lang.Integer cannot be cast to Java.lang.Long

これを達成するためのより良い方法はありますか?

Java 1.6を使用しています。

96
Tiago Veloso

いいえ、IntegerからLongに変換できても、intlongにキャストできません。 individual値が数値であることがわかっており、長い値を取得する場合は、次のように使用できます。

Number tmp = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
Long value1 = tmp.longValue();

配列の場合、より複雑になります...

80
Jon Skeet

単に:

Integer i = 7;
Long l = new Long(i);
117
vahid kh
Integer i = 5; //example

Long l = Long.valueOf(i.longValue());

これにより、ストリングへの変換によるパフォーマンスの低下を回避できます。 IntegerのlongValue()メソッドは、int値の単なるキャストです。 Long.valueOf()メソッドは、vmにキャッシュされた値を使用する機会を与えます。

45
Rich MacDonald

奇妙なことに、文字列から解析すると機能することがわかりました。

 int i = 0;
 Long l = Long.parseLong(String.valueOf(i));
 int back = Integer.parseInt(String.valueOf(l));

勝つ。

17
Anon

整数の末尾に「L」を追加して、整数を直接longに変換します。

Long i = 1234L;
8
Jeff Johny

整数をLongに変換する非常にシンプルで、それを変換する多くの方法
例1

 new Long(your_integer);

例2

Long.valueOf(your_integer); 

例3

Long a = 12345L;

例4
すでに整数としてint型を入力している場合、これを行うことができます:

Integer y = 12;
long x = y.longValue();
6
Naresh Kumar

整数がnullでない場合

Integer i;
Long long = Long.valueOf(i);

iは、自動的にlongに型キャストされます。

valueOfの代わりにnewを使用すると、コンパイラーまたはJVMがこの値(小さい場合)をキャッシュできるため、コードが高速になります。

5
((Number) intOrLongOrSomewhat).longValue()
4
cingulata

整数がNULLではないことがわかっている場合は、これを簡単に行うことができます。

Integer intVal = 1;
Long longVal = (long) (int) intVal
2
Steven Spungin
new Long(Integer.longValue());

または

new Long(Integer.toString());
1
Pavlo Zvarych

int変数からlong型へのパーサーは、Integerクラスに含まれています。次に例を示します。

int n=10;
long n_long=Integer.toUnsignedLong(n);

この組み込み関数を簡単に使用して、intからlongを解析するメソッドを作成できます。

    public static long toLong(int i){
    long l;
    if (i<0){
        l=-Integer.toUnsignedLong(Math.abs(i));
    }
    else{
        l=Integer.toUnsignedLong(i);
    }
    return l;
}
1
Bremsstrahlung

これはヌルセーフです

Number tmp = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
Long value1 = tmp == null ? null : tmp.longValue();
0
adkisson