JAVA

[java] 지네릭스-<T extends Fruit>과 <? extends Fruit>의 차이

EunaSon 2023. 7. 14. 03:11

extends는  <K extends  T>, <? extends T>  2가지 형태로 사용이 된다. 2개의 사용법과 의미는 각각 다르게 사용된다.

 

<K extends T>

- 타입 파라미터에 지정되는 구체적인 타입을 제한할 경우에 사용된다.

- 클래스 선언시, 그리고 메소드의 타입파라미터에 사용이 가능하다.

- 위, 2번에서 설명한 것과 같이 T와 T의 자손 타입에 대해서만 가능하도록 제한을 한다.

//class 타입 형태로 사용
public Class MakeFood<T extends Food>{ ... }

// 메소드의 타입 파라미터 형태로 사용
public <T extends Number) int add(T t){ ...{

 

 

(메소드의  매겨변수 사용 시에는 에러가 발생한다.)

 

 

<? extends T>

참조형 매개변수의 자료형을 T와 T의 자손 타입에 대해서만 가능하도록 제한을 한다.

메소드의 매개변수, 리턴타입에 사용가능하다.

// 메소드의 매겨변수에 사용
public void printData(List<? extends Food> list){ ... }

// 메소드의 리턴타입에 사용
public List<? extends Food> printData() { ... }

출처

https://yarisong.tistory.com/48