원래 포함된 유형: 일반 유형이 도입된 후 복합 유형은 더 세부적으로 구분됩니다.
이제 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. 인스턴스화 정의 메서드에 대한 제네릭
일반 메서드를 호출할 때 컴파일러는 자동으로 할당을 수행합니다. 컴파일 오류가 보고됩니다.
와일드카드(?)
할당 시 위에 제네릭에 대한 정의와 할당이 있습니다. 위 섹션에서는 할당 유형이 다음과 같은 경우 모든 할당이 특정 유형이라고 말합니다. 불확실한 경우 대신 와일드카드(?)를 사용합니다.
(예:
List<?> unknownList; List<? extends Number> unknownNumberList; List<? super Integer> unknownBaseLineIntgerList;
) Java 컬렉션 프레임워크에서 매개변수 값이 알 수 없는 유형인 컨테이너의 경우 클래스는 읽기만 가능합니다. 요소를 추가할 수는 없지만 해당 유형을 알 수 없으므로 컴파일러는 추가된 요소의 유형이 컨테이너 유형과 호환되는지 여부를 식별할 수 없습니다. 유일한 예외는 NULL