정수를 롱으로 변환
반사를 통해 필드의 값을 구해야 합니다.필드의 데이터 유형이 무엇인지 항상 확신할 수 없는 경우가 있습니다.이를 위해 코드 복제를 방지하기 위해 다음과 같은 방법을 만들었습니다.
@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
에 대한 변수long
type은 에 포함됩니다.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
'programing' 카테고리의 다른 글
Django 중첩 쿼리 (0) | 2022.09.17 |
---|---|
PHP에서 레이트 스태틱바인딩이란 정확히 무엇입니까? (0) | 2022.09.16 |
물체를 어떻게 파괴합니까? (0) | 2022.09.16 |
numpy dtype을 네이티브 python 형식으로 변환하는 중 (0) | 2022.09.16 |
Galera 10 클러스터 노드에서 쿼리 삭제 (0) | 2022.09.16 |