* 제네릭 클래스의 타입 인자 제한하기

특정 클래스에서 인스턴스를 참조하게 되면 어떤 클래스 인스턴스를 참조하는것인지 알 수 없다. 그래서 

인터페이스로 제한하는 방식이 있다.

1
2
3
4
5
6
7
8
9
10
11
interface function{
    public String fun();
}
 
class Bo<extends function>{
 
    T ob;
    public T get(){
        System.out.println(ob.fun); //가능하다.
    }
}
cs

* 제네릭 메소드의 정의

메소드 뿐만 아니라 클래스 에서도 제네릭 메소드를 정의하는것이 가능하다. 핵심은 타입 매개변수를 표시해주는 것인데

1
public static <T> Bo<T> makeBox(T o) //<T>는 T가 타입 매개변수임을 알린다.
cs
1
2
Bo<String> sBo = BoFa.<String>makBo("sw");
Bo<String> sBo = BoFa.makBo("sw");
cs

제네릭 메소드 호출 시 위와 같이 표현하지만 생략된 채로도 사용할 수 있다. 


* 제네릭 메소드의 제한된 타입 매개변수 선언

제네릭 클래스정의 시 타입 제한이 제네릭 메소드 호출 시 타입 인자를 제한할 수 있다.

1
2
3
4
public static <extends Number> Bo<T> makeBo(T o){
 
    System.out.println(o.intValue());
}
cs

관련된 문제 하나를 풀어보고 포스팅을 마무리 한다.

1
2
3
4
5
public static <extends Number> void swapBo(Bo<T> a,Bo<T> b){
        T temp = a.get();
        a.set(b.get());
        b.set(temp);    
  }
cs

void 자리에 Box<T>를 자꾸 줘서 void로 바꾸는데 시간이 걸렸다.