제한된 지네릭 클래스
class FruitBox<T extends Fruit>{
ArrayList<T> list = new ArrayList<T>();
...
}
FruitBox<Apple> appleBox = new FruitBox<Apple>();
FruitBox<Toy> toyBox = new FruitBox<Toy>();
interface Eatable {}
class FruitBox<T extends Eatable> { ... }
지네릭스의 제약
- 타입 변수에 대입은 인스턴스 별로 다르게 줄 수 있다.
Box<Apple> appleBox = new Box<Apple>();
Box<Grape> grapeBox = new Box<Grape>();
- static 멤버에 타입 변수 사용 불가 (static 멤버 : 모든 인스턴스에 공통)
class Box<T> {
static T items;
static int compare(T t1, T t2) { ... }
...
}
- 배열, 객체 생성할 때(new 뒤에) 타입 변수 사용불가. 타입 변수로 배열 선언은 가능
class Box<T>{
T[] itemArr;
...
T[] toArray() {
T[] tmpArr = new T[itemArr.length];
}
}