다크호스 프로그래머 - 일반 확장
5002 단어 java 고급다크호스 프로그래머
범형이 없을 때 대상이라면 어떤 유형이든 같은 집합에 저장할 수 있고 범형 집합을 사용하면 하나의 집합에 저장할 수 있다
의 요소는 하나의 유형으로 한정되어 있으며, 범형에는 같은 유형의 대상만 저장할 수 있으며, 그 중의 대상을 가져올 때 유형의 강전 조작을 할 필요가 없다.
컴파일러는 컴파일할 때 범형에서 지정한 형식 정보를 제거하고 반사 방식을 이용하여 하나의 범형에 Integer의 대상을 추가할 수 있습니다.
범용 용어:
ArrayList는 범주 유형이라고 합니다.
E는 유형 변수 또는 유형 매개변수라고 합니다.
ArrayList는 패라메트릭 유형이라고 합니다.
여기서 Integer는 유형 매개변수의 인스턴스 또는 실제 유형 매개변수라고 합니다.
꺾쇠괄호<>typeof로 읽기
ArrayList는 원래 유형이라고 합니다.
패라메트릭 유형과 원본 유형의 호환성:
1. 패라메트릭 유형은 원본 유형의 객체를 참조하여 보고서 경고를 컴파일할 수 있습니다. 예를 들어,
Collection c = new Voctor();
2. 원본 유형은 매개 변수화된 유형의 대상을 인용하여 보고서 경고를 컴파일할 수 있다. 예를 들어 다음과 같다.
Collection c = new Voctor();
매개 변수 유형은 유형 매개 변수의 계승 관계를 고려하지 않으며, 다음 두 예의 문법은 모두 잘못된 것이다
Voctor v = new Voctor();//에러
Voctor v = new Voctor();//에러
수조 실례를 만들 때, 수조의 요소는 매개 변수화 형식을 사용할 수 없습니다. 예를 들어 다음과 같습니다.
Voctor v[] = new Voctor[10];//에러
범주를 클래스로 정의할 수 있습니다.
package com.east.firt;
import java.util.Set;
// dao : data access object--->crud( )
public class GenericDao { // ,
public void add(T x){
}
public T findByid(int id){
return null;
}
public void delete(T obj){
}
public void delete(int id){
}
public void update(T obj){
}
public Set findByConditions(String where){
return null;
}
}
범형 중?와일드카드
4
/*
?
*/
public static void printCollection(Collection> c)
{
for(Object obj:c)
{
System.out.println(obj);
}
//cols.add("String");// , String
c.size();//ok,
c = new HashSet();
}
요약:1、“?”어떤 종류든지"와일드카드는 다른 매개 변수화된 유형을 참조할 수 있습니다."?"와일드카드 정의 변수는 주로 참조로 사용됩니다.
매개 변수화와 무관한 방법을 호출할 수 있지만 매개 변수화와 관련된 방법을 호출할 수 없습니다.
2. 범주형 중?와일드카드 확장
와일드카드 상단 경계 지정하기
Vector extends Number> = new Vector();
와일드카드 아래 경계 지정하기
Vector super Ingeter>
한정 와일드카드는 항상 자신을 포함합니다
범용 집합의 종합 응용 사례
package com.east.firt;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.*;
public class GenericTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
ArrayList collection2 = new ArrayList();
collection2.add("abc");
String element = collection2.get(0);
// System.out.println(element);
// printCollection(collection2);
HashMap maps = new HashMap();
maps.put("tqf", 26);
maps.put("jyj", 25);
maps.put("wyl", 26);
Set> entrySet = maps.entrySet();
for(Map.Entry entry:entrySet){
System.out.println(entry.getKey()+":"+entry.getValue());
}
swap(new String[]{"abc","xyz","cast"},1,2);
//
GenericDao dao = new GenericDao();
dao.add(new ReflectPoint(3,3));
// String s = dao.findByid(1);
ReflectPoint rp = dao.findByid(1);
//
Method applyMethod =
GenericTest.class.getMethod("applyVector", Vector.class);
Type[] types = applyMethod.getGenericParameterTypes();
ParameterizedType ptype = (ParameterizedType)types[0];
System.out.println(ptype.getRawType());
System.out.println(ptype.getActualTypeArguments()[0]);
}
public static void applyVector(Vector v1){
}
// , ?
public static void printCollection(Collection> collection){
System.out.println(collection.size());
for(Object obj:collection){
System.out.println(obj);
}
}
//
private static void swap(T[] a,int i ,int j){
T tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
//
private static void fillArray(T[] a,T obj){
for(int i =0;i T add(T x,T y){
return y;
}
}
위의 종합 응용 사례에서 일반 사용에 관한 다음과 같은 몇 가지를 요약해 냈다.
1. 범주형 중의 실제 유형 매개 변수는 인용 유형이어야 하며 기본 유형이 되어서는 안 된다.
2. 일반적인 유형 매개 변수를 배치하는 데 사용되는 뾰족한 괄호는 다른 모든 수식자 다음과 방법의 귀환 유형 앞에 나타나야 한다.
즉, 반환 값과 인접하기 전에 관례에 따라 유형 매개 변수는 보통 대문자로 표시된다.
3. 인용 형식의 매개 변수만 일반적인 방법의 실제 매개 변수로 사용할 수 있다. 예를 들어 swap(new int[] {1,2,3})는 컴파일되지 않는다.
4. 범형을 적용할 때 extends 한정자를 사용할 수 있고 범형을 정의할 때도 사용할 수 있다.
5. 일반적인 방법, 구조 방법과 정적 방법은 모두 범형을 사용할 수 있다.
6. 유형 변수로 이상을 표시할 수도 있다. 매개 변수화된 이상이라고 하는데 방법의throws 목록에 사용할 수 있으나 사용할 수 없다
catch 자구 중.
7. 범주에서 여러 유형의 매개 변수를 동시에 가질 수 있으며 이들을 정의하는 꺾쇠 괄호에 쉼표로 구분할 수 있다. 예를 들어 다음과 같다.
public static V getValue(K key){
return map.get(key);
}
사용자 정의 범용 방식으로 임의의 매개 변수화 형식의 집합에 있는 모든 내용을 출력합니다. 이 방법은 상례에서 사용합니다
끝?이 때 일반 방법보다 어댑터가 더 효과적이기 때문에 하나의 유형 변수로 두 파라미터 사이나 파라미터를 표현할 수 있다
반환 값과의 관계, 즉 같은 유형 변수가 방법 서명의 두 곳에서 사용되거나 유형 변수가 방법 코드에서 사용된다
서명할 때만 사용하는 것이 아니라 일반적인 방법도 사용된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Lambda 표현식의 간단한 사용Lambad 표현식이 무엇인지 Lambda 표현식은 사실 익명 함수로 그 중의 Lambda 추상에 직접 대응한다.Lambda 표현식은 클러치라고도 할 수 있으며 함수를 하나의 방법의 매개 변수로 방법에 전달할 수 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.