반응형
Java Generics WildCard : vs
이 두 기능의 차이점은 무엇입니까?
static void gPrint(List<? extends Number> l) {
for (Number n : l) {
System.out.println(n);
}
}
static <T extends Number> void gPrintA(List<T> l) {
for (Number n : l) {
System.out.println(n);
}
}
동일한 출력이 표시됩니다.
T
다시 사용되지 않기 때문에이 경우 차이가 없습니다 .
a를 선언하는 이유는 T
다시 참조하여 두 개의 매개 변수 유형 또는 반환 유형을 함께 바인딩 할 수 있기 때문입니다 .
차이점은 T
와일드 카드 를 사용할 때 참조 할 수 없다는 것 입니다.
당신은 지금이 아니므로 "차이가 없다"는 것입니다. 그러나 다음 T
은 차이를 만드는 데 사용할 수있는 방법입니다.
static <T extends Number> T getElement(List<T> l) {
for (T t : l) {
if (some condition)
return t;
}
return null;
}
이것은 전달 된 것과 동일한 유형 을 반환 합니다 . 예를 들어 둘 다 컴파일됩니다.
Integer x = getElement(integerList);
Float y = getElement(floatList);
T
당신이 확장 특정 형식에 충실해야 사용 입력 어떤 한정된 유형, 즉되고 Number
당신이 전달하는 경우 예를 들어, Double
목록에 대한 유형을, 당신은 그것을 전달할 수 없습니다 Short
로 유형을 T
유형 인 Double
하고 목록이 이미 의해 묶여있다 유형. 반대로 ?
( wildcard
) 를 사용 하면 확장되는 "모든"유형을 사용할 수 있습니다 Number
( Short
및 Double
해당 목록에 모두 추가 ).
T를 사용하면 List에서 모든 유형의 작업을 수행 할 수 있습니다. 단, 사용시 추가를 할 수 없습니다.
T-전체 액세스 권한이있는 객체 참조와 동일
합니까? -부분 접근 권한 부여
static void gPrint(List<? extends Number> l) {
l.add(1); //Will give error
for (Number n : l) {
System.out.println(n);
}
static <T extends Number> void gPrintA(List<T> l) {
l.add((T)1); //We can add
for (Number n : l) {
System.out.println(n);
}
반응형
'program story' 카테고리의 다른 글
Django 관리자 : 인라인으로서의 OneToOne 관계? (0) | 2020.12.05 |
---|---|
야생에서 좋은 오이 예? (0) | 2020.12.05 |
데스크탑 경로에 대한 환경 변수는 무엇입니까? (0) | 2020.12.04 |
메소드의 속성 값 읽기 (0) | 2020.12.04 |
JavaScript 비동기 콜백에서 발생한 예외를 포착 할 수 있습니까? (0) | 2020.12.04 |