구체적인 매개 변수화 된 유형입니까?

환상적인 JamieBurns

올바르게 이해하면 다음은 일반 유형입니다.

class Example<T> {}

다음은 구체적인 매개 변수화 된 유형입니다.

Example<String>

그리고 다음은 구체적인 매개 변수화 된 유형 아닙니다 .

Example<? extends Number>

다음을 감안할 때 누군가 Example이 구체적인 매개 변수 유형인지 여부를 설명 할 수 있습니까?

Example< OtherExample<? extends Number> >

Concrete가 아닌 경우 유형 인수 자체가 와일드 카드이거나 중첩 된 유형 인수가 와일드 카드이면 가장 바깥 쪽 유형이 Concrete가 아니라고 말하는 것이 사실 입니까?

최신 정보

이제 Concrete Parameterized Type이라는 용어가 공식적인 Java 용어가 아닐 수도 있다는 것을 알고 있습니다.

다음 소스에서 가져 왔습니다. http://www.angelikalanger.com/GenericsFAQ/FAQSections/ParameterizedTypes.html#Topic2

결론

나는 다음과 같이 설득되었습니다.

Example< OtherExample<? extends Number> >

구체적인 매개 변수화 된 유형 (GenericsFAQ의 용어가 의도 한대로)은 와일드 카드 ( "?")를 직접 포함하지 않고 "new"키워드와 함께 사용할 수 있기 때문입니다.

감사!

Radiodef

여기 FAQ 안젤리카의 다른 곳에서는 다음과 같이 말합니다.

와일드 카드 매개 변수화 된 유형은 새 표현식에 나타날 수있는 구체적인 유형이 아닙니다.

그러나 이것을 확장하기 위해, 타입 인자로 제공 할 수있는 몇 가지 다른 종류의 타입이 있다고 말하고 싶습니다.

예제 클래스가 주어지면 :

class Example<T> {
    T value;
}

원시 유형 (유형 인수 없음) :

new Example();

원시 유형은 유형의 "지우기"와 같습니다. T바운드가 없기 때문에 원시 Example<T>Example<Object>. 차이점은 원시 유형으로 인해 제네릭 유형 시스템이 크게 무시된다는 것입니다. 실제로는 사용하지 마십시오. 이전 버전과의 호환성을위한 것입니다.

일반 유형 인수 (유형은 다른 곳에서 가져옴) :

class HasExample<T> {
    Example<T> myExample = new Example<T>();

    HasExample(T value) {
        myExample.value = value;
    }
}

의 유형 Example다음 유형은 공급 무엇이든지받습니다 HasExample.

'콘크리트'유형 인수 :

new Example<String>();

이것은 예제의 유형이 실제로 알려져 있음을 의미합니다.

원시 유형 및 제네릭과 함께 제네릭 클래스를 인스턴스화 할 수있는 세 가지 방법이 있습니다.

와일드 카드 유형 인수 (알 수 없음) :

static void handle(Example<?> example) {
    System.out.println(example.value);
}

하는 와일드 카드 나타냅니다 Example일단이 있었다 구체적인 유형을하지만 우리는 그것이 무엇 확실하지 않다. 그것이 무엇인지 모르기 때문에 와일드 카드는 특정 방식으로 매개 변수화 된 멤버의 사용을 허용하지 않습니다. 위의 방법에서 우리는 여전히 그것을 인쇄 할 수 있습니다 ( toString간접적으로 호출 ). 왜냐하면 그것이 Object.

복잡한 선언이 구체적으로 간주되어야하는지 여부에 대해서는 예와 아니오 모두이지만 대부분 예라고 말하고 싶습니다. 다음과 같은 추가 클래스가 있다고 가정합니다.

class Holder<T> {
    T held;
}

그러면 다음을 수행 할 수 있습니다.

Holder<Example<? extends Number>> holder =
    new Holder<Example<? extends Number>>();

의 유형 인수 holder는 다음 Example과 같은 의미에서 구체적인 유형 : 입니다.

  • 와일드 카드 포함되어 있어도 유형 변수 또는 와일드 카드 자체 가 아닙니다 .
  • Holder이 유형 으로의 새 인스턴스를 인스턴스화 할 수 있습니다 .

각각의 유형 인수가 인스턴스로 수행 할 수있는 작업에 다른 영향을 미치기 때문에 유형 HolderExample개별적 으로 생각하는 것이 유용 할 것 Holder입니다.

다음과 같은 작업을 수행 할 수 있습니다.

Example<Integer> example = new Example<Integer>();
example.value = Integer.valueOf(0);
// set holder.held
holder.held = example;
// get holder.held, but we lose some type information
Example<? extends Number> example = holder.held;
// access and use a member of the Example
Number number = example.value;
System.out.println(number.intValue());

그러나 우리는 이것을 할 수 없습니다 :

// set parameterized member of the Example
holder.held.value = Integer.valueOf(1);

이것이 와일드 카드의 효과이며 선언 된 유형 holder이 "완전히 구체적이지 않음" 이라고 말할 수있는 이유 입니다. 그러나 이것은 중첩 된 개체에 대한 영향입니다. 와일드 카드는 Holder인스턴스 를 사용할 수있는 방식을 직접 제한하지 않습니다 . Example인스턴스 멤버를 사용할 수있는 방식 만 제한합니다 .

이러한 이유로 A<B<? extends C>>(중첩 된 와일드 카드 포함)과 같은 유형 을 구체적 으로 생각하는 것이 합리적 이지만 몇 가지주의 사항이 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

자바 : 매개 변수화 된 데이터 유형 및 비 구체적 유형

분류에서Dev

자바 : 매개 변수화 된 데이터 유형 및 비 구체적 유형

분류에서Dev

매개 변수화 된 생성자 인수의 유형을 확인하는 방법은 무엇입니까?

분류에서Dev

TSQL 매개 변수가 구조화 된 유형인지 판별

분류에서Dev

매개 변수화 / 인덱싱 된 유형에서 catamorphism을 작동시키는 방법은 무엇입니까?

분류에서Dev

매개 변수화 된 개체를 변수로 확인할 수 없습니다.

분류에서Dev

Scala에서 추상화 유형의 유형 매개 변수에 해당하는 구체적인 유형을 반영하는 방법은 무엇입니까?

분류에서Dev

OCaml의 매개 변수화 된 유형

분류에서Dev

다른 매개 변수를 사용하여 매개 변수화 된 인터페이스를 여러 번 구현할 수없는 이유는 무엇입니까?

분류에서Dev

A의 일반 하위 유형이 반환 매개 변수로 선언 된 경우 A의 구체적인 하위 유형을 반환 할 수없는 이유는 무엇입니까?

분류에서Dev

Haskell : 인스턴스 매개 변수화 된 유형 하나의 단일 유형

분류에서Dev

EL에서 매개 변수화 된 메소드 호출의 인수 유형

분류에서Dev

매개 변수화 된 유형이 계층 구조를 통과 할 때 Java에서 제네릭 유형의 인스턴스를 만드시겠습니까?

분류에서Dev

스칼라에서 매개 변수화 된 유형을 통해 암시 적 val / def를 얻는 방법은 무엇입니까?

분류에서Dev

템플릿으로 전송 된 매개 변수의 유형을 확인하는 방법은 무엇입니까?

분류에서Dev

재구성 된 텍스트 / 스핑크스로 문서화 할 때 선언에 매개 변수 유형을 포함하는 방법은 무엇입니까?

분류에서Dev

매개 변수 순서와 무관 한 일반화 된 std :: same_as (즉, 두 개 이상의 유형 매개 변수에 대해) 형식을 구현하는 방법은 무엇입니까?

분류에서Dev

저장소 구현에 매개 변수화 된 유형의 메소드 필요

분류에서Dev

Haskell에서 매개 변수화 된 유형을 JSON으로 직렬화하는 방법은 무엇입니까?

분류에서Dev

객체를 확장 할 때 유형 매개 변수에 정의 된 유형이 주 함수에서 참조 될 때와 다른 이유는 무엇입니까?

분류에서Dev

너무 적은 유형 매개 변수로 특화된 '사전'(1 개는 있지만 예상 2 개) Swift

분류에서Dev

매개 변수화 된 유형을 확장하는 유형 변수를 어떻게 선언합니까?

분류에서Dev

Java에서 매개 변수화 된 유형과 원시 유형 인스턴스화의 차이점

분류에서Dev

함수 매개 변수로 구조화 된 객체

분류에서Dev

할당시 "예상 구조체, 발견 된 유형 매개 변수"를 해결하는 방법은 무엇입니까?

분류에서Dev

AspectJ 매개 변수화 된 유형은 대상 포인트 컷을 지원하지 않습니다.

분류에서Dev

Jenkins의 매개 변수화 된 빌드에 매개 변수에 변수 삽입

분류에서Dev

매개 변수화 된 유형 세트를 맵으로 변환

분류에서Dev

매개 변수화 된 유형 세트를 맵으로 변환

Related 관련 기사

  1. 1

    자바 : 매개 변수화 된 데이터 유형 및 비 구체적 유형

  2. 2

    자바 : 매개 변수화 된 데이터 유형 및 비 구체적 유형

  3. 3

    매개 변수화 된 생성자 인수의 유형을 확인하는 방법은 무엇입니까?

  4. 4

    TSQL 매개 변수가 구조화 된 유형인지 판별

  5. 5

    매개 변수화 / 인덱싱 된 유형에서 catamorphism을 작동시키는 방법은 무엇입니까?

  6. 6

    매개 변수화 된 개체를 변수로 확인할 수 없습니다.

  7. 7

    Scala에서 추상화 유형의 유형 매개 변수에 해당하는 구체적인 유형을 반영하는 방법은 무엇입니까?

  8. 8

    OCaml의 매개 변수화 된 유형

  9. 9

    다른 매개 변수를 사용하여 매개 변수화 된 인터페이스를 여러 번 구현할 수없는 이유는 무엇입니까?

  10. 10

    A의 일반 하위 유형이 반환 매개 변수로 선언 된 경우 A의 구체적인 하위 유형을 반환 할 수없는 이유는 무엇입니까?

  11. 11

    Haskell : 인스턴스 매개 변수화 된 유형 하나의 단일 유형

  12. 12

    EL에서 매개 변수화 된 메소드 호출의 인수 유형

  13. 13

    매개 변수화 된 유형이 계층 구조를 통과 할 때 Java에서 제네릭 유형의 인스턴스를 만드시겠습니까?

  14. 14

    스칼라에서 매개 변수화 된 유형을 통해 암시 적 val / def를 얻는 방법은 무엇입니까?

  15. 15

    템플릿으로 전송 된 매개 변수의 유형을 확인하는 방법은 무엇입니까?

  16. 16

    재구성 된 텍스트 / 스핑크스로 문서화 할 때 선언에 매개 변수 유형을 포함하는 방법은 무엇입니까?

  17. 17

    매개 변수 순서와 무관 한 일반화 된 std :: same_as (즉, 두 개 이상의 유형 매개 변수에 대해) 형식을 구현하는 방법은 무엇입니까?

  18. 18

    저장소 구현에 매개 변수화 된 유형의 메소드 필요

  19. 19

    Haskell에서 매개 변수화 된 유형을 JSON으로 직렬화하는 방법은 무엇입니까?

  20. 20

    객체를 확장 할 때 유형 매개 변수에 정의 된 유형이 주 함수에서 참조 될 때와 다른 이유는 무엇입니까?

  21. 21

    너무 적은 유형 매개 변수로 특화된 '사전'(1 개는 있지만 예상 2 개) Swift

  22. 22

    매개 변수화 된 유형을 확장하는 유형 변수를 어떻게 선언합니까?

  23. 23

    Java에서 매개 변수화 된 유형과 원시 유형 인스턴스화의 차이점

  24. 24

    함수 매개 변수로 구조화 된 객체

  25. 25

    할당시 "예상 구조체, 발견 된 유형 매개 변수"를 해결하는 방법은 무엇입니까?

  26. 26

    AspectJ 매개 변수화 된 유형은 대상 포인트 컷을 지원하지 않습니다.

  27. 27

    Jenkins의 매개 변수화 된 빌드에 매개 변수에 변수 삽입

  28. 28

    매개 변수화 된 유형 세트를 맵으로 변환

  29. 29

    매개 변수화 된 유형 세트를 맵으로 변환

뜨겁다태그

보관