-
Type safety: Unchecked cast from ~JAVA 2024. 2. 16. 13:50728x90반응형
발생원인
Object 타입으로 받아온 값을 List<Test>로 형변환을 시도하던 중 발생하였다.
이는 타입 안전성(Type safety)은 컴파일 중에 타입 제약 조건을 강제하여 런타임 중에 타입 오류를 방지하는 것을 의미하여 예외가 아닌 경고이다.
해결방법
- SuppressWarnings 어노테이션 붙이기
- SuppressWarnings 관련 옵션은 링크에서 확인 가능합니다.
@Getter public class Tistory{ Object data; } @SuppressWarnings("unchecked") List<Test> vo = (ArrayList<Test>) tistory.getData();- 개발자 답게 타입을 정확히 확인하고 형변환 하기
- 항상 타입을 정확히 하는 것이 좋아 보인다.
@Getter public class Tistory{ Object data; } List<Test> list = new ArrayList<>(); if(tistory.getData() instanceof ArrayList<?>){ for(Object obj : (ArrayList<?>)tistory.getData()){ if(obj instanceof LinkedHashMap){ list.add(convertObjToType(LinkedHashMap<?,?> obj, Test.class)); } } } private <T> T convertObjToClassType(LinkedHashMap<?, ?> map, Class<T> clazz) { try { Constructor<T> constructor = clazz.getConstructor(); T clazzInstance = constructor.newInstance(); for (Map.Entry<?, ?> entry : map.entrySet()) { String key = (String) entry.getKey(); Object value = entry.getValue(); try { Field field = clazz.getDeclaredField(key); field.setAccessible(true); // 필드 접근을 활성화합니다. field.set(clazzInstance, value); // 필드에 값을 설정합니다. } catch (NoSuchFieldException e) { e.printStackTrace(); } } return clazzInstance; } catch (Exception e) { e.printStackTrace(); } return null; }728x90반응형'JAVA' 카테고리의 다른 글
Java Stream이란? feat. 메모리 로드, 병렬 처리, 연산 흐름 (1) 2024.05.23 AOP - java.lang.ClassCastException (0) 2024.02.23 (객체 지향 설계) 순수 자바로 DIP 원칙 지키기 (0) 2023.08.19 Java Scanner 몰랐던 부분 (0) 2023.01.30 [Java]import never used 경고문구 (1) 2023.01.27 - SuppressWarnings 어노테이션 붙이기