a, b, c에서 오류가 발생한다.
a: 참조형 b의 지네릭 타입 Object와 생성자 Box()의 지네릭 타입 String이 불일치한다.
b: a의 문제점 + Object형의 객체를 Box<Object> 타입의 참조변수에 저장 불가하다.
c: String만 받을 수 있는 Box<String> 클래스의 setItem(T item) 메소드에 Object를 넣으려 하고 있다.
c, d가 올바른 호출을 하고 있다.
a, b: 지네릭 메서드가 요구하는 매개변수와 실제 대입되는 매개변수의 타입이 다르다.
d: 지네릭 메서드의 타입 호출은 매개변수에서 유추 가능하기 때문에 생략 가능하다.
e: Object는 T extends Fruit의 조건에 부합하지 않기 때문에 불가능하다.
c, d, g 가 틀렸다.
c: Box는 지네릭 타입을 Fruit을 상속한 클래스로 한정한다. 따라서 ? 또한 "? extends Object"가 아닌 "? extends Fruit"을 뜻한다.
d: Object 과 Fruit 타입 불일치
g:와일드카드 ?는 하나의 참조가 여러 타입의 지네릭 객체를 가리킬 수 있도록 돕는다. 객체의 생성을 하는 new와 같은 연산자에서는 사용 불가하다.
public static <T extends Product> ArrayList<T> merge(
ArrayList<T> list, ArrayList<T> list2){
ArrayList<T> newList = new ArrayList<>(list);
newList.addAll(list2);
return newList;
}
int i=0;
for (Card.Kind kind: Card.Kind.values()){
for (Card.Number number: Card.Number.values()){
cardArr[i++] = new Card(kind, number);
}
}
이하 애너테이션 공부 후 풀이 예정