[java] 정수를 Long으로 변환

반사를 사용하여 필드의 값을 얻어야합니다. 필드의 데이터 유형이 무엇인지 항상 확신하지 못하는 경우가 발생합니다. 이를 위해 일부 코드 중복을 피하기 위해 다음 방법을 만들었습니다.

@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을 사용하고 있습니다.



답변

아니요, 에서 로 변환 할 수는 있지만 Integer로 전송할 수 없습니다 . 를 들어 개별 알려져있다 값이 숫자를 수하고 긴 값을 얻으려면, 당신은 사용할 수 있습니다 :Longintlong

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

배열의 경우 더 까다로울 것입니다 …


답변

간단히:

Integer i = 7;
Long l = new Long(i);


답변

Integer i = 5; //example

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

이렇게하면 문자열로 변환하는 성능 저하를 방지 할 수 있습니다. longValue()Integer 의 메서드는 int 값의 캐스트입니다. 이 Long.valueOf()메서드는 vm에게 캐시 된 값을 사용할 수있는 기회를 제공합니다.


답변

이상하게도 문자열에서 구문 분석하면 작동한다는 것을 알았습니다.

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

승리.


답변

정수를 Long으로 변환하기 매우 간단하고 여러 가지 방법으로
예제 1

 new Long(your_integer);

예 2

Long.valueOf(your_integer); 

예제 3

Long a = 12345L;

예제 4
Integer로 입력 된 int가 이미있는 경우 다음을 수행 할 수 있습니다.

Integer y = 12;
long x = y.longValue();


답변

Integer 끝에 ‘L’을 추가하여 정수를 long으로 직접 변환합니다.

Long i = 1234L;


답변

Integer가 null이 아닌 경우

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

i자동으로 long.

valueOf대신 사용 new하면 컴파일러 또는 JVM에 의해이 값 (작은 경우)을 캐싱 할 수 있으므로 코드가 더 빨라집니다.