245

私はこことグーグルの人々の両方で、行き来するのに問題があり、その逆ではないことを見つけ続けてい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である必要があるため、使用し続けています。

4

14 に答える 14

257

longキャスト先とキャスト先には違いがあることに注意してくださいLonglong(プリミティブ値)にキャストする場合は、 Long(それをラップする参照型)に自動的にボックス化される必要があります。

newまたは、を使用してのインスタンスを作成Longし、値で初期化することもできintます。

于 2009-08-19T21:03:17.303 に答える
216

以下を使用してくださいLong.valueOf(int);

于 2009-08-19T21:08:25.220 に答える
24

すでにintを整数として入力している場合は、次のように実行できます。

Integer y = 1;
long x = y.longValue();
于 2009-08-20T09:54:25.367 に答える
18

使用する

new Long(your_integer);

また

Long.valueOf(your_integer);
于 2016-04-02T14:10:36.647 に答える
10
 1,new Long(intValue);
 2,Long.valueOf(intValue);
于 2018-05-08T03:24:54.123 に答える
8

どうですか

int myInt = 88;

//コンパイルされません

Long myLong = myInt;

//コンパイルし、intのNULL以外の精神を保持します。最高のキャストはキャストなしです。もちろん、ユースケースでは、長くなる可能性のあるNULL値が必要になる場合があります。ただし、intまたは他のlongが唯一の入力であり、メソッドを変更できる場合は、このアプローチをお勧めします。

long myLong = myInt;

//コンパイルは最も効率的な方法であり、ソース値がNULLであり、NULLになることはないことを明確にします。

Long myLong = (long) myInt;
于 2016-11-17T13:14:45.577 に答える
6

私はこの小さなおもちゃを持っています。これは非ジェネリックインターフェイスも扱います。フィードが間違っている場合にClassCastExceptionをスローしても問題ありません(OKで満足です)

public class TypeUtil {
    public static long castToLong(Object o) {
        Number n = (Number) o;
        return n.longValue();
    }
}
于 2012-02-06T16:56:50.950 に答える
6

Javaでは、次のことができます。

 int myInt=4;
 Long myLong= new Long(myInt);

あなたの場合は次のようになります。

content.setSequence(new Long(i));
于 2015-02-17T17:15:11.940 に答える
3

参照を使用してlong値を取得しNumberます。

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

}
于 2015-03-10T10:03:15.377 に答える
2

私はこれにかなりの問題を抱えていました。私はただしたかった:

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;
}

これでうまくいくようです。単純なキャストの量はなく、上記の解決策はどれも私にはうまくいきませんでした。とてもイライラします。

于 2010-05-25T13:25:04.293 に答える
2
 //Suppose you have int and you wan to convert it to Long
 int i=78;
 //convert to Long
 Long l=Long.valueOf(i)
于 2017-03-27T08:08:57.923 に答える
1

Android Studioからの提案lintチェック:不要なボクシングを削除:つまり、開梱は:

public  static  long  integerToLong (int minute ){
    int delay = minute*1000;
    long diff = (long) delay;
    return  diff ; 
}
于 2020-12-31T19:45:13.183 に答える
0

メソッドのみがあるとすぐにLong.valueOf(long)、からのキャストは、intlong使用する場合に暗黙的に実行されLong.valueOf(intValue)ます。

これを行うためのより明確な方法は

Integer.valueOf(intValue).longValue()
于 2018-03-27T11:36:23.987 に答える
0

ここで提案されている他の方法とは別に、以下のコードも試すことができます。

(long)intValue

プリミティブからプリミティブへ。

于 2021-10-08T12:15:05.747 に答える