class FruitBox<T extends Fruit> {
ArrayList<T> list = new ArrayList<T>();
...
}
FruitBox<Apple> appleBox = new FruitBox<Apple>(); // ok
FruitBox<Toy> toyBox = new FruitBox<Toy>(); // 에러. Toy는 Fruit의 자손이 아님
Box<Apple> appleBox = new Box<Apple>();
Box<Grape> appleBox = new Box<Grape>();
class Box<T> {
static T item; // 에러
static int compare(T t1, T t2) { ... } // 에러
}
이유 : static은 모든 인스턴스에 공통으로 쓰기 때문에
class Box<T> {
T[] itemArr; // ok. T타입의 배열을 위한 참조변수
T[] toArray() {
T[] tmpArr = new T[itemArr.length]; // 에러. 제너릭 배열 생성 불가
}
}
객체생성, 배열생성할때 new T 이런식으로 못씀. 객체생성시 타입이 확정되어 있어야함