문제

나는 여기에서 계속해서 문제를 일으키는 사람들과 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을 던지는 것은 괜찮습니다 (Ok and Happy)

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의 비 널 정신을 컴파일하고 유지합니다. 최고 깁스 ~이다 전혀 캐스트가 없습니다. 물론, 유스 케이스는 길고 가능한 널 값이 필요할 수 있습니다. 그러나 INT 또는 다른 오래가 유일한 입력이고 방법을 수정할 수 있다면이 접근법을 제안합니다.

long myLong = myInt;

// 컴파일하고, 가장 효율적인 방법이며, 소스 값이 널이 아니며 결코 널이 될 수 없음을 분명히합니다.

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

나는 이것에 많은 어려움을 겪었다. 나는 단지 :

thisBill.IntervalCount = jPaidCountSpinner.getValue();

IntervalCount가 길고 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