>  기사  >  Java  >  Java 제네릭에서 T와 물음표(와일드카드)의 차이점

Java 제네릭에서 T와 물음표(와일드카드)의 차이점

高洛峰
高洛峰원래의
2016-12-19 15:43:112181검색

원래 포함된 유형: 일반 유형이 도입된 후 복합 유형은 더 세부적으로 구분됩니다.

이제 List, List은 두 가지 유형입니다.

제네릭의 장점은 다음과 같습니다.

시작 버전

 public void write(Integer i, Integer[] ia);  public void write(Double  d, Double[] da);

일반 버전

 public <T> void write(T t, T[] ta);

간단한 코드

제네릭 정의

1. 클래스 뒤에 정의

클래스 이름을 따릅니다

 public class TestClassDefine<T, S extends T>{}

제네릭 T, S, S가 T를 상속하도록 정의합니다

2. 메소드 데코레이터 뒤에 정의

수정자 바로 뒤(공개)

 public <T, S extends T> T testGenericMethodDefine(T t, S s){}

일반 T, S, S가 T를 상속하도록 정의

제네릭 인스턴스화

1. 클래스에 정의된 제네릭을 인스턴스화합니다.

클래스 변수를 처음 선언하거나 인스턴스화할 때. 예를 들어

    List<String> list;     list = new ArrayList<String>;

두 번째 상속 클래스이거나 인터페이스를 구현할 때입니다. 예를 들어

public class MyList<E> extends ArrayList<E> implements List<E> {...}

2. 인스턴스화 정의 메서드에 대한 제네릭076402276aae5dbec7f672f8f4e5cc81

일반 메서드를 호출할 때 컴파일러는 자동으로 할당을 수행합니다. 컴파일 오류가 보고됩니다.

와일드카드(?)

할당 시 위에 제네릭에 대한 정의와 할당이 있습니다. 위 섹션에서는 할당 유형이 다음과 같은 경우 모든 할당이 특정 유형이라고 말합니다. 불확실한 경우 대신 와일드카드(?)를 사용합니다.

(예:

List<?> unknownList;  List<? extends Number> unknownNumberList;  
List<? super Integer> unknownBaseLineIntgerList;

) Java 컬렉션 프레임워크에서 매개변수 값이 알 수 없는 유형인 컨테이너의 경우 클래스는 읽기만 가능합니다. 요소를 추가할 수는 없지만 해당 유형을 알 수 없으므로 컴파일러는 추가된 요소의 유형이 컨테이너 유형과 호환되는지 여부를 식별할 수 없습니다. 유일한 예외는 NULL


Java 제네릭에서 T와 물음표(와일드카드)의 차이점에 대한 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.