extends T
extends T
'JAVA'의 제너릭은 단순히 클래스 형을 전달하는 것 이상의 기능을 제공하기 때문에, 목적에 따라 응용하는 것이 가능합니다.
제너릭으로 전달받는 클래스형이 '특정 클래스를 상속'받거나, '특정 인터페이스를 구현'하는 클래스형으로 제한할 수 있습니다.
>> 방법 1 : 제너릭을 클래스 기술에 사용.
class [Class name] <T extends [Name of class or interface]>{
제너릭을 이용한 클래스 기능 명세.
}
>> 방법 2 -1 : 클래스의 범위를 한정하기 위해 사용.
class [Class name] <? extends [Name of class or interface]>{
제너릭을 사용하지 않고 클래스 기능 명세.
}
>> 방법 2 -2 : 클래스의 범위를 한정하기 위해 사용.
class [Class name] <? super T>{
제너릭을 사용하지 않고 클래스 기능 명세.
}
제너릭을 사용하는 방법은 < ~ > 내부에 클래스형을 넣는 것입니다. 이것 조차도 상당히 복잡해보이는 구조입니다.
[T extends G]
->> 인터페이스인 'G'를 구현하거나, 클래스인 'G'를 상속받는 데이터형 만을 제너릭 'T'로 수용합니다. 인터페이스난 클래스 모두
'extends'를 사용합니다.
[T super G]
->> 상속 계층에서 'G 이상의 상위 계층에 속하는 데이터형' 만을 제너릭 'T'로 수용합니다.
[?]
->> 대상을 어떠한 것으로 명확하게 지정하지 않는다는 의미입니다.
'? extends X'는 'X'를 상속받거나 구현하는 어떤 것이든 가능하다는 의미입니다.
또한, '? super T'는 T 클래스형 혹은 그보다 상위 계층의 클래스형이라면 어떤 것이든 가능하다는 의미입니다.
※ Generics in Collection
ex) public static <T extends Comparable<? super T>> void sort(List<T> list)
1. Comparable<? super T> => X
->> T와 같은 계층 혹은 그 이상의 클래스 형을 제너릭으로 받는 'Comparable'이라는 인터페이스를 의미합니다.
2. <T extends X>
->> T는 위에서 언급한 인터페이스를 구현하는 클래스형으로 제한됩니다.
'JAVA' 카테고리의 다른 글
[JAVA]Filter HttpServletResponseWrapper HTML 소스 컨트롤 (0) | 2017.11.16 |
---|---|
[JAVA]Filter HTML 태그 제거 (0) | 2017.11.08 |
[JAVA] 에러정의 web.xml (0) | 2017.11.07 |
[JAVA] error (0) | 2017.11.06 |
[JAVA]EncodingFilter 구현 (0) | 2017.11.06 |