자바의 정석 Ch 12 연습문제

jaehun_dev·2023년 1월 8일
0

Java

목록 보기
6/6

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);
    }
}

이하 애너테이션 공부 후 풀이 예정


profile
취업준비생/코딩&프로젝트 같이 하실분 연락주세요

0개의 댓글