반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 참조형 반환타입
- 기본형 매개변수
- 자바의 면접
- 전략 패턴
- 팩토리패턴
- 싱글톤 패턴
- 스프링 빈
- 팩토리 패턴
- SOLID원칙
- www.naver.com치면 발생하는일
- 스프링 싱글톤
- 리버스 프록시
- 네트워크
- 쇠막대기
- 옵저버 패턴
- 빈 타입 조회
- 포워드 프록시
- 참조형 매개변수
- Class Loader
- mvvm패턴
- @Tranctional
- 스프링 컨테이너
- try-catch
- 백준 1935
- 백준 2164
- k번째큰수
- removeAll
- TCP/IP 4계층
- 후위표기식
- 스프링
Archives
- Today
- Total
스파이더 웹 개발
지네릭 - 와일드 카드 본문
728x90
반응형
와일드 카드란 ? 지네릭 타입에 다형성을 적용하는 방법
와일드 카드는 기호 "?" 로 표현이 되는데, 'extends' 와 'super' 로 상한과 하한을 제한할 수 있다
<? extends T> 와일드 카드의 상한 제한 T와 그 자손들만 가능 <? super T> 와일드 카드의 하한 제한 T와 그 조상들만 가능 <?> 제한 없음. 모든 타입이 가능 <? extends Object> 와 동일 |
728x90
Study 아래 두개의 차이점 ?
public static void printAll(ArrayList<? extends Product> list, ArrayList<? extends Product> list2) {...}
public static <T extends Product> void PrintAll(ArrayList<T> list, ArrayList<T> list2) {...}
아래 코드를 살펴보자
public class GenTest {
public static void main(String[] args) {
ArrayList<Tv> tv = new ArrayList<>();
tv.add(new Tv("삼성"));
tv.add(new Tv("LG"));
ArrayList<Audio> audio = new ArrayList<>();
audio.add(new Audio("오디오"));
printAll(tv,audio);
printAll2(tv,audio);//컴파일 오류
}
public static void printAll(ArrayList<? extends Product> list, ArrayList<? extends Product> list2) {
for (Product product : list) {
System.out.println("list1 : "+product);
}
for (Product product : list2) {
System.out.println("list2 : " + product );
}
}
public static <T extends Product> void printAll2(ArrayList<T> list3, ArrayList<T> list4) {
for (Product product : list3) {
System.out.println("list3 : "+product);
}
for (Product product : list4) {
System.out.println("list4 : " + product );
}
}
}
class Product {
}
class Tv extends Product {
String tv;
public Tv(String tv) {
this.tv = tv;
}
public String getTv() {
return tv;
}
}
class Audio extends Product{
String audio;
public Audio(String audio) {
this.audio = audio;
}
public String getAudio() {
return audio;
}
}
위의 예제를 간단하게 코드로 구현해보았다.
코드로 보니 쉽게 알 수있는데, 두가지의 가장 큰 차이점은 "?" 와일드카드의경우 Product 자손 클래스면 매개변수로 넘겨줄 수 있다
그러나 "T" 타입의 경우 Product 자손 중에 T를 특정한다는 것이므로 두개의 매개변수로 동일한 특정타입 하나로 매개변수로 넘겨줘야한다. 즉, 예제에서는 Tv면 Tv, Audio면 Audio 하나로 통일을 해줘야 한다
728x90
반응형
'Study' 카테고리의 다른 글
쿠키(Cookie)와 세션(Session) (0) | 2022.08.14 |
---|---|
일급 객체 (0) | 2022.08.11 |
정규 표현식 (0) | 2022.08.08 |
ArrayList 용량이 늘어나는 기준 (0) | 2022.08.06 |
Collection.clear( ) 와 Collection.removeAll( ) 의 차이 (0) | 2022.08.06 |
Comments