programing

정수를 롱으로 변환

bestcode 2022. 9. 16. 00:05
반응형

정수를 롱으로 변환

반사를 통해 필드의 값을 구해야 합니다.필드의 데이터 유형이 무엇인지 항상 확신할 수 없는 경우가 있습니다.이를 위해 코드 복제를 방지하기 위해 다음과 같은 방법을 만들었습니다.

@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);

문제는 제가 캐스팅을 할 수 없을 것 같다는 겁니다.Integer로.Long:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long

이것을 달성할 수 있는 더 좋은 방법이 있나요?

자바 1.6을 사용하고 있습니다.

심플:

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

아니, 캐스팅은 안 돼Integer로.Long에서 변환할 수 있지만,int로.long숫자로 알려져 있고 긴 값을 얻고 싶은 개별 값의 경우 다음을 사용할 수 있습니다.

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

어레이의 경우 더 까다로워집니다.

Integer i = 5; //example

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

이렇게 하면 String으로 변환했을 때의 퍼포먼스 저하를 피할 수 있습니다.longValue()Integer의 method는 int 값의 캐스트일 뿐입니다.Long.valueOf()method를 사용하면 VM에서 캐시된 값을 사용할 수 있습니다.

이상하게도 끈으로 해석하면 효과가 있다는 것을 알았다.

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

이기다.

Integer가 null이 아닌 경우

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

i에 자동적으로 타이프 캐스트 됩니다.long.

사용.valueOf대신new는 컴파일러 또는 JVM에 의해 이 값(작은 경우)을 캐싱할 수 있으므로 코드가 고속화됩니다.

정수를 길고 매우 단순하게 변환하는 방법 및 여러 가지 방법
예 1

 new Long(your_integer);

예 2

Long.valueOf(your_integer); 

예 3

Long a = 12345L;

예 4
int를 Integer로 이미 입력한 경우 다음을 수행할 수 있습니다.

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

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

Long i = 1234L;
((Number) intOrLongOrSomewhat).longValue()

Integer가 NULL이 아닌 것을 알고 있는 경우는, 다음의 조작을 간단하게 실시할 수 있습니다.

Integer intVal = 1;
Long longVal = (long) (int) intVal
new Long(Integer.longValue());

또는

new Long(Integer.toString());

파서int에 대한 변수longtype은 에 포함됩니다.Integer다음은 예를 제시하겠습니다.

int n=10;
long n_long=Integer.toUnsignedLong(n);

이 빌트 함수를 사용하면 쉽게 해석하는 메서드를 만들 수 있습니다.int로.long:

    public static long toLong(int i){
    long l;
    if (i<0){
        l=-Integer.toUnsignedLong(Math.abs(i));
    }
    else{
        l=Integer.toUnsignedLong(i);
    }
    return l;
}

번호의 정확한 클래스(정수, , 더블 등)를 모르는 경우 Number에 캐스팅하여 긴 값을 얻을 수 있습니다.

Object num = new Integer(6);
Long longValue = ((Number) num).longValue();

null 래퍼 인스턴스의 경우

Integer i;
Long l = Optional.ofNullable(i)
                 .map(Long::valueOf)
                 .orElse(null);

이것은 null-safe입니다.

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

Integer를 Long으로 변환하려면 Integer 값을 캐스팅하십시오.

Integer intValue = 23;
Long longValue = (long) intValue;

Long 유형의 List의 경우 각 Integer 값의 끝에 L을 추가합니다.

List<Long> list = new ArrayList<Long>();
list  = Arrays.asList(1L, 2L, 3L, 4L);

잭슨에 의한 값 변환 시도

ObjectMapper mapper = new ObjectMapper()
Integer a = 1;
Long b = mapper.convertValue(a, Long.class)

언급URL : https://stackoverflow.com/questions/6690745/converting-integer-to-long

반응형