>  Q&A  >  본문

java中在哪些情况下需要使用泛型通配符如:? extends T 或者 ? super T

至于什么是泛型通配符,我是知道的,但是不知道具体在项目里的使用场景,比如哪些情况下,我们创建的类或者接口需要用到泛型通配符呢

迷茫迷茫2712일 전736

모든 응답(2)나는 대답할 것이다

  • 阿神

    阿神2017-04-18 10:51:24

    Effective Java: Producer Extends, Consumer Super라는 책에 나오는 이 문장을 기억하세요.
    자세한 설명은 http://stackoverflow.com/ques...

    보충제

    TreeMap에는 생성자가 있습니다:

    으아악

    Comparator<K> 또는 Comparator< 확장 대신 Comparator<? super K> 유형을 지정해야 하는 이유를 생각해 보세요.

    회신하다
    0
  • PHPz

    PHPz2017-04-18 10:51:24

    저는 Java를 작성하지 않지만 모든 제네릭은 상호 운용 가능합니다. 이때 우연히 Taobao OPEN의 SDK를 보게 되었습니다. 이것은 일반 와일드카드를 가장 잘 설명하는 실제 예입니다.

    특히 Java 버전의 SDK를 찾았습니다. https://github.com/ggd543/tao...를 참조하세요.

    으아악

    모든 API 요청은 execute을 통해 작동되며 이 메서드는 ? extends T 와일드카드 상한을 사용하여 반환되는 개체를 TaobaoResponse의 하위 클래스로 제한합니다.

    간단히 말하면 제약입니다.

    Taobao SDK의 관점에서 와일드카드 상한의 가장 큰 값은 모든 Taobao SDK 요청에 의해 반환된 결과에 API의 요청 상태를 나타내는 codemsg와 같은 몇 가지 공통 매개변수가 있다는 것입니다. .

    자, 다시 돌아가서 execute의 구체적인 구현을 살펴보겠습니다.

    으아악

    본문의 catch에는 localResponse이 있고 해당 유형은 T이지만 이 T는 단순한 Object 개체가 아닙니다. T의 유형은 <🎜의 하위 자식이어야 하기 때문입니다. > 친절해요. TaobaoResponse

    즉,

    이 인스턴스화될 때 해당 유형은 최소한 T의 하위 클래스이고 TaobaoResponse의 정의는 다음과 같습니다. TaobaoResponse 으아악

    그러면 다음과 같은 코드를 직접 볼 수 있습니다.

    으아악

    보세요, 모든 공통 매개변수를 균일하게 처리할 수 있다는 점이 흥미롭지 않나요?

    그래서 Taobao SDK의 관점에서 보면 이것이 일반 와일드카드의 의미입니다.

    회신하다
    0
  • 취소회신하다