12-9~11 제한된 지네릭 클래스, 지네릭스의 제약

oyeon·2020년 12월 28일
0

Java 개념

목록 보기
41/70

제한된 지네릭 클래스

  • extends로 대입할 수 있는 타입을 제한
class FruitBox<T extends Fruit>{  // Fruit의 자손만 타입으로 지정 가능(Fruit 포함)
	ArrayList<T> list = new ArrayList<T>();
    ...
}

FruitBox<Apple> appleBox = new FruitBox<Apple>(); // OK
FruitBox<Toy> toyBox = new FruitBox<Toy>();	  // Error!! Toy는 Fruit의 자손이 아님
  • 인터페이스인 경우에도 extends를 사용
interface Eatable {}
class FruitBox<T extends Eatable> { ... }	// implements 사용 X

지네릭스의 제약

  • 타입 변수에 대입은 인스턴스 별로 다르게 줄 수 있다.
Box<Apple> appleBox = new Box<Apple>();	// OK. Apple 객체만 저장가능
Box<Grape> grapeBox = new Box<Grape>();	// OK. Grape 객체만 저장가능
  • static 멤버에 타입 변수 사용 불가 (static 멤버 : 모든 인스턴스에 공통)
class Box<T> {
    static T items;	// Error!!
    static int compare(T t1, T t2) { ... } // Error!!
      ...
}
  • 배열, 객체 생성할 때(new 뒤에) 타입 변수 사용불가. 타입 변수로 배열 선언은 가능
class Box<T>{
    T[] itemArr;	// OK. T타입의 배열을 위한 참조변수
    	...
    T[] toArray() {
    	T[] tmpArr = new T[itemArr.length];	// Error!! 지네릭 배열 생성불가
    }
}
profile
Enjoy to study

0개의 댓글