Вопрос

Я постоянно нахожу как здесь, так и в Google людей, у которых возникают проблемы с переходом от 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);.

Если у вас уже есть 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));

Мы получим длинное значение, используя 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, отличный от NULL.Лучшее бросать является вообще нет актерского состава.Конечно, ваш вариант использования может потребовать значений Long и NULL.Но если int или другие длинные значения являются вашими единственными входными данными и ваш метод можно изменить, я бы предложил этот подход.

long myLong = myInt;

// Компилируется. Это наиболее эффективный способ, который дает понять, что исходное значение равно и никогда не будет NULL.

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

У меня были большие проблемы с этим.Я только хотел:

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

который, кажется, делает свое дело.Никакие простые кастинги, ни одно из вышеперечисленных решений мне не помогло.Очень неприятно.

 //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