Box< T >의 객체를 생성할 때 참조변수와 생성자에 대입된 타입(매개변수화된 타입)이 일치해야 함 (상속관계에 있어도 불가능)
단, 두 지네릭 클래스의 타입이 상속관계에 있고, 대입된 타입이 같은 것은 괜찮음
Ex)
Box<Apple> appleBox = new Box<Apple>( ); // 가능
Box<Apple> appleBox = new Box<>( ); // JDK1.7부터 추정이 가능한 경우 타입 생략 가능
Box<Fruit> appleBox = new Box<Apple>( ); // 에러
Box<Apple> appleBox = new FruitBox<Apple>( ); // OK. 다형성
class FruitBox<T extends Fruit> {
ArrayList<T> list = new ArrayList<T> ( );
}
interface Eatable { }
class FruitBox<T extends Eatable> { ... }
class FruitBox<T extends Fruit & Eatable> { ... }
Ex)
<? extends T> // 와일드 카드의 상한 제한. T와 그 자손들만 가능
<? super T> // 와일드 카드의 하한 제한. T와 그 조상들만 가능
<?> // 제한 없음. 모든 타입이 가능. <? extends Object>와 동일
java의 정석 chapter12