차이 무엇 과 자바 제네릭은?
이전에 어떤 객체를 의미하기 위해 사용 된 와일드 카드를 본 적이 있지만 최근에는 다음을 사용했습니다.
<? extends Object>
모든 객체가 Object를 확장하므로이 두 가지 사용법이 동의어입니까?
<?>
그리고 <? extends Object>
예상대로, 동의어입니다.
제네릭 extends Object
이 실제로 중복되지 않는 몇 가지 경우가 있습니다. 예를 들어, <T extends Object & Foo>
발생할 T
될 Object
가진 반면, 소거 아래 <T extends Foo>
가 될 것이다 Foo
소거하에. (이는를 사용한 pre-generics API와의 호환성을 유지하려는 경우 중요 할 수 있습니다 Object
.)
출처 : http://download.oracle.com/javase/tutorial/extra/generics/convert.html ; JDK의 java.util.Collections
클래스에 다음 서명이있는 메서드가있는 이유를 설명합니다 .
public static <T extends Object & Comparable<? super T>> T max(
Collection<? extends T> coll
)
<?>
의 지름길로되어 있지만 <? extend object>
둘 사이에는 약간의 차이가 있습니다. <?>
수정 가능하지만 <? extend object>
그렇지 않습니다. 그들이 이렇게 한 이유는 수정 가능한 유형을 쉽게 구별 할 수 있도록하기 위함입니다. 외모가 같은 것을 것을 <? extends something>
, <T>
, <Integer>
nonreifiable 있습니다.
예를 들어이 코드는
List aList = new ArrayList<>();
boolean instanceTest = aList instanceof List<?>;
그러나 이것은 오류를 제공합니다
List aList = new ArrayList<>();
boolean instancetest = aList instanceof List<? extends Object>;
자세한 정보는 Maurice Naftalin의 Java 제네릭 및 컬렉션을 읽어보십시오.
<?>
는 <? extends Object>
. 자세한 내용은 아래 공유 링크를 읽을 수 있습니다.
<?>
"?"
알 수없는 유형을 나타내며 코드에서 모든 유형을 나타낼 수 있습니다. 유형에 대해 잘 모르는 경우이 와일드 카드를 사용하십시오.
ArrayList<?> unknownList = new ArrayList<Number>(); //can accept of type Number
unknownList = new ArrayList<Float>(); //Float is of type Number
참고 : 모든 <?>
것을 의미합니다. 따라서 Object
클래스 에서 상속되지 않는 Type도 받아 들일 수 있습니다 .
<? extends Object>
<? extends Object>
클래스를 확장하는 Object 또는 하위 클래스를 전달할 수 있음을 의미합니다 Object
.
ArrayList<? extends Number> numberList = new ArrayList<Number>(); //Number of subclass
numberList = new ArrayList<Integer>(); //Integer extends Number
numberList = new ArrayList<Float>(); // Float extends Number
T – 유형
E를 나타내는 데 사용 – 요소
K 를 나타내는 데 사용 – 키
V-값
N – 숫자
참조 :
'Programing' 카테고리의 다른 글
POSIX 파일 설명자에서 C ++ fstream을 구성하는 방법은 무엇입니까? (0) | 2020.09.14 |
---|---|
string.h와 strings.h의 차이점 (0) | 2020.09.14 |
신속하고 변형 된 구조체 (0) | 2020.09.14 |
자바 스크립트를 사용하여 알림 음을 재생 하시겠습니까? (0) | 2020.09.14 |
GRPC는 REST와 어떻게 다릅니 까? (0) | 2020.09.14 |