24일차 강의 정리
1. 메소드 제네릭
소스1 (Number 상속받는 메소드 제네릭)
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 | class Box01<T>{ //내가정한 타입이 들어온다(제네릭) T obj; void setObj(T obj){ this.obj = obj; } T getObj(){ return this.obj; } } //아래클래스를 숫자에 한정하여 제네릭을 제한하여 사용 //(Box01<String> box = Template.<String>getMethod("s"); 불가! String은 Number에 상속받지않기때문) class Template{ //^아래<>가 메소드 제네릭위치(리턴타입의 앞) public static <T extends Number> Box01<T> getMethod(T a){ //메소드에 제네릭(Number 상속) Box01<T> box = new Box01<T>(); box.setObj(a); return box; } } public class Ex01 { public static void main(String[] args) { Box01<Integer> box = Template.<Integer>getMethod(1000); //*이것이 중요 System.out.println(box.getObj()); } } | cs |
결과1
소스2
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 | class Box01<T>{ //내가정한 타입이 들어온다(제네릭) T obj; void setObj(T obj){ this.obj = obj; } T getObj(){ return this.obj; } } class Template{ //^아래<>가 메소드 제네릭위치(리턴타입의 앞) public static <T extends CharSequence> Box01<T> getMethod(T a){ //메소드에 제네릭2 Box01<T> box = new Box01<T>(); box.setObj(a); return box; } } public class Ex01 { public static void main(String[] args) { Box01<StringBuffer> box = Template.<StringBuffer>getMethod(new StringBuffer("1000")); //*이것이 중요 System.out.println(box.getObj()); } } | cs |
결과2
2. 와일드카드
형식 : <? extends Number>
Number자리가 class가아닌 Interface 이더라도 extends를 사용한다.
소스
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 | class Box02<T>{ //내가정한 타입이 들어온다(제네릭) T obj; void setObj(T obj){ this.obj = obj; } T getObj(){ return this.obj; } } public class Ex02 { public static void main(String[] args) { Box01<?> box = new Box01<Integer>(); //?는 와일드카드 box = new Box01<String>(); box = new Box01<Double>(); Box01<? extends Number> box1 = new Box01<Integer>(); //?는 와일드카드 box1 = new Box01<Double>(); // box3 = new Box01<String>(); //오류 Box01<? super Integer> box2 = new Box01<Integer>(); //?는 와일드카드 box2 = new Box01<Number>(); //상위클래스만 가능 box2 = new Box01<Object>(); } } | cs |
결과가 없는 소스로
어떠한 형식으로 사용이 되는지 확인만 하는 소스이다.
'* Programming > JAVA' 카테고리의 다른 글
DAY25 스레드 스케줄링&동기화 (0) | 2016.08.08 |
---|---|
DAY24 스레드 (0) | 2016.08.08 |
DAY23 제네릭1 (0) | 2016.08.08 |
DAY22 큐&스택 (0) | 2016.08.04 |
DAY22 컬렉션프레임워크 Map (0) | 2016.08.03 |