클래스
class Test<T>{
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
아래는 Method Generic Type 사용법이다.
메소드 제너릭 타입은 Class에 Generic Type을 선언하지 않고, 각 메소드마다 Generic Type을 선언해 사용할수 있다.
아래의 코드 처럼
메소드의 파라미터의 T 이 선언되어 있다면, 리턴타입 바로앞에 <T> 제너릭 타입을 선언해주어야한다.
※ 메소드의 파라미터에 <T>가 선언되어 있다면, ReturnType 앞에 <T>를 선언하자.
class TestMethod {
public static <T> List<T> method(List<T> list, T item) {
list.add(item);
return list;
}
}
아래는 WildCard Generic Type 사용법이다.
Generic 타입에는 <?>도 존재한다.
?는 알수없는 타입이며, 사용법으로는 아래와같다
<?> : 모든 객체 자료형, 내부적으로는 Object로 인식
<? super 객체형> : 명시된 객체자료형의 상위 객체, 내부적으로는 Object로 인식
<? extends 객체자료형> : 명시된 객체자료형을 상속한 하위객체, 내부적으로는 명시된 객체 자료형으로 인식
class TestWildCard {
public List<? extends Object> wildMethod1() {
return new ArrayList<Long>();
}
public <T> List<? extends String> wildMethod12 (T t) {
return new ArrayList<String>();
}
public List<?> method3() {
return new ArrayList<>();
}
}
Generic Type 사용시 주의해야할 문법들이다.
- Generic Type으로는 전역변수(Static)를 선언할수 없다.
- Generic Type으로는 인스턴스를 생성할수 없다.
타입의 매개변수는 T 말고도 존재한다
E - Element
K - Key
N - Number
T - Type
V - Value
Generic 타입이 인스턴스화 될때, 컴파일러는 타입파라미터와 관련된 정보를 제거한다.
제너릭을 사용하기 이전의 라이브러리 등과 호완성을 유지하기 위함.
출처: https://namjackson.tistory.com/18
'백엔드 > Java' 카테고리의 다른 글
[Java] 배열 정렬(Arrays) (0) | 2021.08.04 |
---|---|
[Java] 소수 반올림(Math.round, String.format) (0) | 2021.08.04 |
[Java] Parameter... 표현 (0) | 2021.04.01 |