문제가 메서드의 반환 형식이 아니며 에 바인딩 된 Generic Type
입니다.
는의가 무엇이 잘못되었는지 보자 : -
public <C extends Cat> Mixer<? super Dog> useMe(A a, C c)
반환 형식 Mixer<? super Dog>
수단을, 당신은 유형 Dog
의 Mixer
또는 개의 super-type
을 반환 할 수 있습니다, Animal
을 할 수있다. 모두 Animal
및 Object
이 Dog
의 super-type
입니다 때문에
//return new Mixer<Object>();//KO
return new Mixer<Animal>(); //OK
그래서, 모두 return
문에서도 는 잘 작동 것입니다.
그러나, first one
하지, 때문에 당신이로 클래스를 선언한다에에 맞는 않는 이유 : - 그래서
public class Mixer<A extends Animal>
, 당신은 bound
Mixer
과 연관 될 수 있습니다 type
클래스를 Animal
또는 subtype
중 하나에 지정하십시오. Object
이 Animal
의 하위 아니라, 이후 지금, 당신은 만들 수 없습니다 : - 그래서
new Mixer<Object>();
, 당신은 같은 클래스의 인스턴스 생성 할 수 있습니다 : -
new Mixer<Animal>(); // OR
new Mixer<Dog>(); // Dog extends Animal // OR
new Mixer<Cat>(); // Cat extends Animal
// **** But NOT like this ******
new Mixer<Object>(); // Object does not extend Animal
당신이 재 수를 귀하의 질문 문구를? 당신이 무엇을 요구하는지 명확하지 않습니다. –
@RohitJain : 그는'Mixer'을 돌려 주겠다고 말했지만'Mixer
나는이 책의 답을 이미 가지고 있지만 의심의 여지가 없다. 메서드의 반환 유형이 Mixer super Dog>이므로 Dog의 수퍼 유형 또는 Dog의 수식 유형 인 Mixer 객체를 의미합니다. 그러나이 경우 Object는 상위 유형이며 컴파일러 오류가 있습니다. – Joe