이른바 범주형: 정의 클래스, 인터페이스에서 유형 인자를 지정할 수 있도록 하는 것이다. 이 유형 인자는 변수를 설명하고 대상을 만들 때 확정된다(즉 실제 유형 인자를 전달하거나 유형 실삼이라고 할 수 있다). 범용 클래스 또는 인터페이스 마름모꼴 구문
//
public interface List<E> extends Collection<E>
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
//
List<String> list = new ArrayList();
//Java7
List<String> list = new ArrayList<>();
범형류에서 자식류를 파견하다
// 1
public class App extends GenericType<String>
// 2
public class App<T> extends GenericType<T>
// 3
public class App extends GenericType
위범형 진정한 범용 클래스는 존재하지 않는다. 범용 클래스는 자바 가상 컴퓨터에 투명하다.JVM은 범용 클래스의 존재를 알지 못한다. 다시 말하면 JVM은 범용 클래스를 처리하는 것과 일반 클래스는 별 차이가 없다.따라서 정적 방법, 정적 초기화 블록, 정적 변수에서는 유형 인삼을 사용할 수 없습니다. - 다음 방법은 모두 잘못된 것입니다
private static T data;
static{
T f;
}
public static void func(){
T name = 1;
}
다음 예는 측면에서 범용 클래스가 존재하지 않는다는 것을 검증할 수 있다
public static void main(String[] args){
List<String> a1 = new ArrayList<>();
List<Integer> a2 = new ArrayList<>();
System.out.println(a1.getClass() == a2.getClass());
System.out.println(a1.getClass());
System.out.println(a2.getClass());
}
출력
true
class java.util.ArrayList
class java.util.ArrayList
유형 와일드카드 우선 명확해야 한다. 만약에 Foo가 Bar의 부류라면 List는 List의 부류가 아니다.Java는 다양한 범용 상위 클래스를 나타내기 위해 "?"를 사용합니다.범용 통배를 나타낸다.List다양한 범용 목록의 상위 클래스를 나타냅니다.이 어댑터가 있는 List 범주는 (set) 요소를 설정할 수 없으며, (get) 요소만 가져올 수 있습니다.프로그램에서 List의 유형을 확인할 수 없으므로 객체를 추가할 수 없습니다.객체는 개체 유형일 수 있습니다. 다음 메서드에서 컴파일 오류가 발생합니다.
List<?> list = new ArrayList<>();
list.add(new Object());
아이디어 몇 가지: 1. List 대상은 List
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: