Java 범주 초기 인식
14765 단어 초기 학습
1. 왜 일반형을 사용합니까?
범용 프로그램 설계는 작성된 코드가 여러 종류의 대상에 의해 다시 사용될 수 있다는 것을 의미한다.예를 들어, Java 컬렉션에서 ArrayList 클래스는 모든 유형의 객체를 모을 수 있습니다.
2. 일반적인 사용
범형 클래스를 정의하고 범형 방법을 정의할 수 있습니다.범형 방법은 범형류에서 정의할 수 있을 뿐만 아니라 일반류에서도 정의할 수 있다.
//
public class A<T>{
private T a;
private T b;
public A(){a=null;b=null;}
public A(T a,T b){this.a=a;this.b=b;}
public T getA(){return a;}
public T getB(){return b;}
public void setA(T value){a=value;}
public void setA(T value){b=value;}
//、、、、
}
//
public class B{
public static <T>T getNumber(T a){//
return a;
}
}
3. 유형 변수의 제한
클래스나 방법은 유형 변수에 대해 제한을 가해야 한다.예를 들어 지금 우리는 비교적 큰 방법을 써야 한다.범용 파라미터를 이용하면 마음대로 할 수 있다.그러나 매개 변수마다 compareTo()라는 방법으로 두 수를 비교해야 한다.이 유형의 매개 변수가Comparable 인터페이스를 실현하지 않으면compareTo () 방법을 사용할 수 없습니다. 컴파일러가 오류를 보고할 것입니다.그래서 T는 귀속 유형의 하위 유형이어야 한다.
//
public class C{
public static <T extends Comparable & Serializable>T max(T a,T b){// extends 。 , 。 Comparable
return a.comparreTo(b);
}
}
여러 개의 인터페이스를 연결하려면 인터페이스나 클래스 간에 기호**&**를 사용하여 연결할 수 있습니다.
4. 범용 코드와 가상 기기
1. 유형 지우기
가상 기기에는 일반적인 클래스와 방법만 있고 일반적인 유형의 대상은 없다.컴파일하는 과정에서 가상 기회는 일반 프로그램에 대해 유형 지우기를 한다.언제든지 범주 유형을 정의하면 해당 원본 유형이 자동으로 제공됩니다.원본 형식의 이름은 형식 파라미터를 삭제한 후의 일반 형식 이름입니다.형식 변수를 지우고 한정된 형식으로 바꿉니다. (귀속된 형식입니다. 기본적으로 Object 형식이 아닌 경우)
2. 범용 표현식 번역
프로그램이 일반적인 방법을 호출할 때, 되돌아오는 형식을 지우면 컴파일러가 강제 형식 변환을 삽입합니다.유형 변수가 클래스나 인터페이스를 바인딩하지 않은 경우 기본값은 Object 유형으로 강제로 변환됩니다.
public class A<T>{
private T a;
private T b;
public A(){a=null;b=null;}// , null
public A(T a,T b){this.a=a;this.b=b;}
public T getA(){return a;}
public T getB(){return b;}
public void setA(T value){a=value;}
public void setA(T value){b=value;}
public static void main(String[]args){
A<Integer> a=new A<Integer>(1,2);
/*
1、 getA()
2、 Object Integer 。 Integer 。 int。
*/
int b=a.getA();
System.out.println(b);
}
}
3. 범용 번역 방법
유형 지우기도 일반적인 방법에 나타납니다.예를 들면 다음과 같습니다.
public static <T extends Comparable>T min(T a,T,b){}
유형이 지워진 후 T는 지워졌고 한정된 유형Comparable만 남았습니다.만약 어떤 종류가 이 범주류를 계승한 후에.프로그래머는 부류에 대한 방법을 다시 쓸 가능성이 높다.사실 이곳은 재작성이라고 할 수 없고 재부팅이라고 할 수 있다.다음 예를 참조하십시오.
public class D extends A<Integer>{
public void setA(Integer a){}
}
유형이 지워지면 클래스 A의 seta() 메서드는 다음과 같습니다.
public void setA(Object a){}
이로 인해 두 가지 방법이 같은 방법으로 존재한다.피하기 위해 다리 방법을 사용한다.다음과 같습니다.
public void setA(Object a){setA(Integer a);}
한 마디로 하면 자바 범용 전환에 관한 사실을 기억해야 한다.
5. 범위형의 제약과 한계성
S와 T가 어떤 관계가 있든지 간에 보통 ArrayList
아래의 내용은 자신이 본 것이 비교적 간단명료하다.심지어 이해하지 못했다.자바 핵심 기술권에서 배웠습니다.단지 자신이 기억할 수 있도록 나중에 쉽게 찾을 수 있도록 하기 위해서다.사내들이 한꺼번에 가져갔으면 좋겠어.흰둥이가 필요할 때 다시 굽는다이하 대행.
7. 와일드카드
초유형 한정이 있는 어댑터는 일반 대상에 쓸 수 있고, 하위 형식 한정이 있는 어댑터는 일반 대상에서 읽을 수 있다.