2014-04-17 1 views
1

첫 번째 필드가 숫자 (BigDecimal, int ...) 인 객체가 있습니다. 나는 그것을 오랫동안 파싱하고 싶다. 그러나 파싱 할 때 "ValueOf"메쏘드는 Object에 적용 할 수 없다고 말한다.Java : 객체의 값을 가져와 long으로 구문 분석하십시오.

나는 이것을 시도했다.

if (list != null && !list.isEmpty()) { 

     for (Object[] obj : list) { 
      Object obj1 = obj[0]; 

      Dto dto= new Dto(); 

      dto.setId(Long.valueOf((obj[0]))); 

그러나이

+0

호출 값이 – VinhNT

+0

인 전에 obj [0] .toString()을 사용하십시오. valueOf를 호출하기 전에 개체를 구문 분석해야합니다. Btw : AND-concat 대신에'StringUtils.isEmpty()'를 사용하십시오. – Chris311

+0

왜 BigDecimal을 Long으로 변환하려고합니까? 당신은 잠재적으로 숫자를 잘라 버리는 것입니다. – JonK

답변

1

전화 toString 오류를하고 긴 값으로 구문 분석 :

dto.setId(Long.parseLong(obj[0].toString())); 
1
Long.parseLong(obj[0].toString()); 

Long.parseLong() 내부 서식 기호없이 문자열을 기대하고있다.

형식을 신경 쓰지 않는다면 Long.toString()을 사용하여 긴 값을 문자열로 변환하고 Long.parseLong()을 사용하여 변환하십시오.

이 방법도 있습니다 : Long.valueOf(str); 차이점은 parseLongprimitive long을 반환하고 valueOfnew Long() object을 반환합니다.

1

보다 효율적인 방법은 Number로 변환하는 것입니다.

public static long asLong(Object o) { 
    return o instanceof Number 
      ? ((Number) o).longValue() 
      : Long.parseLong(o.toString()); 
} 

참고 : 오류 케이스를 다르게 처리합니다. 예를 들어, new BigDecimal("2.5") longValue()를 사용하면 2을 반환하지만 Long.parseLong ("2.5")는 예외를 throw합니다. 그것은 당신이 선호하는 행동에 달려 있습니다.

관련 문제