سؤال

أظل العثور على سواء هنا وشعب جوجل يشارك long ل int وليس العكس. ومع ذلك، أنا متأكد من أنني لست الوحيد الذي يعمل في هذا السيناريو قبل الذهاب إليه 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);

لدي هذه اللعبة الصغيرة، والتي تتعامل أيضا مع واجهات غير عامة. أنا بخير معها رمي كلاسكاستد في حالة عدم وجود خطأ (موافق وسعيد)

public class TypeUtil {
    public static long castToLong(Object o) {
        Number n = (Number) o;
        return n.longValue();
    }
}

في جافا يمكنك القيام به:

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

في حالتك سيكون:

content.setSequence(new Long(i));

سنحصل على القيمة الطويلة باستخدام 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

}

ماذا عن

int myInt = 88;

// لن تجميع

Long myLong = myInt;

// يجمع، وتحتفظ بروح int غير الفارغة. الأفضل يقذف يكون لا يلقي على الإطلاق. وبعد بالطبع، قد تتطلب حالة استخدامك قيم خالية طويلة ومحتملة. ولكن إذا كانت الملك، أو سيرا على الأوقات الأخرى هي مدخلاتك الوحيدة، ويمكن تعديل طريقتك، أود أن أقترح هذا النهج.

long myLong = myInt;

// compliles، هي الطريقة الأكثر كفاءة، وتجعل من الواضح أن القيمة المصدر، هي ولن تكون فارغة أبدا.

Long myLong = (long) myInt;
 1,new Long(intValue);
 2,Long.valueOf(intValue);

كان لدي الكثير من المتاعب مع هذا. أردت فقط أن:

thisBill.IntervalCount = jPaidCountSpinner.getValue();

عندما يكون interchalcount فترة طويلة، وتم تعيين 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()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top