이 코드 조각을 컴파일하기 위해 런타임에 문제가 발생합니다. java.lang.Integer 오류가 발생합니다. Java.lang.Double에 캐스트 할 수 없습니다. 나는 더 행복보다 더 사람은 컴파일러가 타입에 당신을 도울 수 없기 때문에 당신이 일반적인 HashMap
를 사용하지 않아야합니다,이 코드를java.lang.ClassCastException : java.lang.Integer를 java.lang.Double에 캐스팅 할 수 없음
double x;
public Double getMethod() {
HashMap hashmap= new HashMap();
hashmap = SumCal();
List listabc = (List) hashmap.get("abclist");
int total=(Integer) hashmap.get("all_total");
x = (Double) listabc.get(0)*100/total;
return x;
}
Integer를 Double로 변환 할 수 없기 때문입니다. 그들은 두 개의 다른 클래스이고 하나는 다른 클래스의 서브 클래스가 아닙니다. 대부분 listabc에서 신비하게 가져 오는 요소는 정수입니다. (암시 적 "복싱"전환에 의존하고 있기 때문에 자신을 혼란스럽게 만들고 혼란 스러울뿐입니다. 방금 배울 때 현명하지 않아야합니다.) –
Java에서 클래스 계층 구조를보고 이와 같은 질문을하기 전에 확인하십시오. – ATrubka
공평하게 C 기반 언어는 데이터 형식 변환과 참조 계층 조작과 같은 두 가지 본질적으로 관련이없는 개념에 대해 "캐스트"(용어와 표기법 모두)를 사용하여이 문제를 엄청나게 혼동합니다. "float"을 "int"로 변환하는 것은 "Number"를 "Integer"로 변환하는 것과 완전히 다른 개념입니다. (그리고 나는 교과서/참고서에서 논의 된이 혼란스러운 이분법을 보거나 교실에서 논의되는 것을 듣는 것을 본 적이 없다.) –