Search
Duplicate

아이템 27 - 비 검사 경고를 제거 하라

작성자
챕터
5장 - 제네릭
최종 편집
2023/07/22 05:34
생성 시각
2023/07/21 18:36

비 검사 경고

매개변수 명시

public static void main(String[] args) { List list = new ArrayList(); list.add("Hello"); list.add("World"); } //Raw use of parameterized class 'ArrayList' //Unchecked call to 'add(E)' as a member of raw type 'java.util.List' //Unchecked call to 'add(E)' as a member of raw type 'java.util.List'
Java
복사

@Suppress Warnings(”checked”)

import java.util.ArrayList; import java.util.List; public class NoWarning { @SuppressWarnings({"rawtypes", "unchecked"}) public static void main(String[] args) { List list = new ArrayList(); list.add("Hello"); list.add("World"); } }
Java
복사
이렇게 Warning 을 숨길수는 있으나, 주석으로 명확하게 남겨야한다.

예시

public class NoWarning { private void foo(Object object) { if (object instanceof Collection) { // ? 로 하면 bar(Object object) 가 불리는데, // 내가 원하는건 bar(Collection<Object> object) 가 불리길 원한다 // 물음표로 하면 warning 이 없어지긴한다. @SuppressWarnings("unchecked") Collection<Object> coll = (Collection<Object>) object; //Collection<?> coll = (Collection<?>) object; bar(coll); } } // called when param is Collection<Object> private void bar(Collection<Object> object) { System.out.println("Collection<Object>"); } // called when the param is Collection<?> private void bar(Object object) { System.out.println("object"); } @SuppressWarnings({"rawtypes", "unchecked"}) public static void main(String[] args) { List list = new ArrayList(); /// NoWarning thisClass = new NoWarning(); Collection collection = list; thisClass.foo(collection); } }
Java
복사

내 생각

Warning 을 발생시키지 않는 걸 찾아서 작성해야할듯
@SurpresseWarnings 를 우리가 쓸 일 이 있을까? ⇒ 적절한 예시를 아무리 생각 해봐도 잘 모르겠다..