Generics(3)

roghabo·2021년 7월 15일
0

6. 지네릭 메서드


  • 메서드의 선언부에 지네릭 타입이 선언된 메서드
  • 지네릭 타입의 선언 위치는 반환 타입 바로 앞
  • 지네릭 클래스에 정의된 타입 매개변수와 지네릭 메서드에 정의된 타입 매개변수는 전혀 별개의 것
  • static멤버에는 타입 매개변수를 사용할 수 없지만, 메서드에 지네릭 타입을 선언하고 사용하
    (지네릭 메서드는 지네릭 클래스가 아닌 클래스에도 정의될 수 있음)
    Ex)
      static <T> void sort(List<T> list, Comparator< ? super T > c ) // 가능

      static Juice makeJuice(FruitBox<T> box) // 불가능
  • 지네릭 메서드를 호출할 때는 타입 변수에 타입을 대입해야 함
    그러나 대부분의 경우 컴파일러가 타입을 추정할 수 있기 때문에 생략 가능
    Ex)
      FruitBox<Fruit> fruitBox = new FruitBox<Fruit> ();

      System.out.println(Juicer.<Fruit>makeJuice(fruitBox)); // 타입을 대입
      System.out.println(Juicer.makeJuice(fruitBox)); // 생략 가능
  • 같은 클래스 내에 있는 멤버들끼리는 참조변수나 클래스 이름, 즉 'this.'나 '클래스이름.'을 생략하고 메서드 이름만으로 호출이 가능하지만,
    대입된 타입이 있을 때는 클래스 이름을 반드시 써줘야 한다.
    클래스 이름을 생략할 수 없는 경우에는 대입된 타입을 생략할 수 없다.

7. 지네릭 타입의 형변환


  • 지네릭 타입 -> 원시 타입 (O)
  • 원시 타입 -> 지네릭 타입 (O)
  • 지네릭 타입 -> 지네릭 타입 (X)
  • 지네릭 타입 -> 와일드카드가 포함된 지네릭 타입 (O) - 반대도 성립
    Ex) Box<String> -> Box<? extends Object>
  • 와일드 카드가 포함된 지네릭 타입-> 와일드카드가 포함된 지네릭 타입 (O)
    Ex ) Box<? extends Object> <-> Box<? extends String>

java의 정석 chapter12

profile
Full Stack Developer 📚

0개의 댓글