List를 통해 예시를 들어보겠습니다.
List<? extends Number> numbersExtendList<? super Integer> integerSuper
1.numbersExtend의 경우에는 Number를 부모로둔 어떠한 타입의 리스트를 선언할 수 있습니다.
이 경우 Number를 상속한 경우 Number, Integer, Double, Float 등의 데이터가 있습니다.
Number를 상속했지만 엄연히 List<Number>와 List<Integer>는 하위 타입이 아니며 정확한 타입을 알 수 없어 컴파일러가 add 함수의 사용을 못하게 막습니다.
integerSuper의 경우에는 Integer를 하위 타입으로 둔 어떠한 타입의 리스트를 선언할 수 있습니다.
이 경우 Integer, Number, Object등 어떠한 타입이 올지 특정 되기 때문에 컴파일러가 add 함수의 사용을 가능하게 합니다.
List를 통해 예시를 들어보겠습니다.
List<? extends Number> numbersExtend
List<? super Integer> integerSuper
1.
numbersExtend
의 경우에는Number
를 부모로둔 어떠한 타입의 리스트를 선언할 수 있습니다. 이 경우Number
를 상속한 경우Number, Integer, Double, Float
등의 데이터가 있습니다.Number
를 상속했지만 엄연히List<Number>
와List<Integer>
는 하위 타입이 아니며 정확한 타입을 알 수 없어 컴파일러가 add 함수의 사용을 못하게 막습니다.integerSuper
의 경우에는Integer
를 하위 타입으로 둔 어떠한 타입의 리스트를 선언할 수 있습니다. 이 경우Integer, Number, Object
등 어떠한 타입이 올지 특정 되기 때문에 컴파일러가 add 함수의 사용을 가능하게 합니다.코드