//(비권장 코드)
List test = new ArraysList<>();
tset.add("no1");
test.add(1);
//unbounded wildcard type
private int add(List<?> s1){
s1.add(1); //error
return 1;
}
그렇지 않다면 런타임 시 예외가 발생할 수 있다.
List< Objct > 는 명확하게 내가 Objct라는 타입을 제시한 것임
하단과 같이 merge해 버린다면, 다른 타입이 들어왔을 때 문제가 생김
//잘못된 코드
static List listMerge(List a, List b){
List c = new ArrayList();
c.addAll(a);
c.addAll(b);
return c;
}
List<String> test = new ArraysList<>();
//List : Generic Interface
public interface List<E> extends Collecntion<E> {}
//ArrayList : Generic class
public class ArrayList<E> extends AbstractList<E>
implments List<E>, RadomAccess, Cloneable, java.io.Serializable
예외적인 케이스를 제외하면 명확히 타입을 명시하도록 하자.
Warning이 print 된다는 것은 말 그대로 경고를 보내는 것이다.
만약 안전하다고 확신할 수 있으면 @SupperWarnings("unckecker")를 통해 경고를 숨기자
* 서버의 치명적인 에러 감지 불가
* 잘못 작성한 코드 감지 불가
* 내가 만든 많은 waning을 통해, 정작 봐야 할 중요한 warning을 볼 수 없음
//Runtime Error
Object[] objects = new Long[1];
objects[0] = "test";
//Compile Error
List<Object> objectList = new ArrayList<Long>();