리턴 유형 매개 변수가 유형 매개 변수와 메소드 매개 변수 유형 매개 변수 모두를 능가하도록합니다.일반 메소드는 유형 매개 변수 및 메소드 매개 변수 유형 매개 변수의 슈퍼 유형을 리턴합니다.
import java.util.List;
interface Foo<A> {
<R, B extends R> List<R> eg1(List<B> unit);
<R> List<R> eg2(List<? extends R> unit);
}
을하지만 그 R도의 슈퍼해야 적용하지 않습니다 :
이 컴파일합니다. 어떻게해야합니까?
<B, R super A & B> List<R> func(List<B> unit);
<B> List<? super A & B> func(List<B> unit);
그러나 사람들은 물론, 컴파일되지 않습니다
는 사실상, 나는이 표현된다 어떤 식으로 뭔가를하고 싶어.
두 가지 목적이에 있습니다
- 나는이 방법의 구현에서 A와 B
- 모두의 슈퍼 클래스에 결과를 할당 할 수 있도록하려면, 나는 결과가 필요합니다 A와 B를 모두 포함 할 수있는 유형입니다. 컴파일을 수행하는 첫 번째 예제는 결과에 A를 넣지 않기 때문에 효과가 없습니다.
'R'이'A'의 임의의 상위 유형이 될 수 있고'B'가'R'의 하위 유형이 될 수 있다면'B'는 아무것도 허용되지 않습니다. 왜냐하면' R'은 언제나'Object'가 될 수 있습니다. 이 제네릭이 필요하다고 생각하는 것을 달성하기 위해 노력하고있는 것은 무엇입니까? –
@LouisWasserman 귀하의 의견의 첫 부분에 대답하기 위해 질문에 세부 사항을 추가했습니다. 두 번째 ... 사실, 나는 그 일을 먼저해야만 했어. 해당 인터페이스를 구현하면 문제가 발생하며 내 질문에 대한 대답이라고 생각합니다. – mentics