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 <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 <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

+ Recent posts