티스토리 뷰

728x90
반응형

Type Safety : unchecked


말 그대로 type 의 안정성을 보장할 수 없을 때


이 경고가 발생한다.


내 경우에는 intent 로 


1
ArrayList<Person>
cs



이와 같은 데이터를 넘겨주어


전달받은 Activity 에서


1
ArrayList<Person> persons = (ArrayList<Person>) getIntent().getSerializableExtra("persons");
cs



다음과 같이 type cast 를 했을 때 해당 경고가 발생했다.


Person 은 Serializable 을 implements 한 class 이다.



일반적으로 Java 컴파일러는 실행되는 모든 시점에서 각 변수의 유형을 알고있다.


호환되지 않는 유형으로 작동하면 프로그램이 컴파일되지 않기에 해당 경고를 보여준다.


만약 지정한 형식의 개체만 포함될 것이라는 확신이 들면


1
@SuppressWarnings("unchecked")
cs



을 이용해서 해당 경고를 무시해도 된다.


* @SuppressWarnings()


컴파일러가 일반적으로 경고하는 내용을 제외시킬 때 쓰인다.



하지만 근본적인 해결책은 아니며, 프로그래머가 항상 해당 타입을 의식하고 있어야 한다.


그래서 나는 이와 같은 방식으로 해결하였다.


1
2
3
4
5
6
7
8
9
ArrayList<Person> persons = new ArrayList<>();
Serializable serializable = intent.getSerializableExtra("persons");
if (serializable instanceof ArrayList<?>) {
    for (Object obj : (ArrayList<?>) serializable) {
        if (obj instanceof Person) {
            persons.add((Person) obj);
        }
    }
}
cs




+ References


https://jinwoonote.tistory.com/entry/SuppressWarnings-%EC%9D%B4%EA%B1%B4-%EB%AD%90%EC%A7%80


https://codereview.stackexchange.com/questions/183913/workaround-for-unchecked-cast-of-a-deserialized-object-to-arraylistvehicle


http://www.mimul.com/pebble/default/2009/12/04/1259937540000.html




반응형
공지사항
최근에 올라온 글