Java 범주 초기 인식

14765 단어 초기 학습
0、이번 학습에서는 주로 유형 지우기를 이해했다.예전엔 몰랐어.
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. 범위형의 제약과 한계성
  • 기본 유형 실례화 유형 매개 변수를 사용할 수 없습니다. 예를 들어 ArrayList list=new ArrayList<>().이것은 안 된다.자바 가상기에서 형식 지우기를 한 후 생성된 Object 대상은 int 형식을 저장할 수 없습니다. (대상이 기본 형식으로 강제로 전환할 수 없음으로 이해할 수 있습니다.)기본 데이터 형식으로 설명할 수는 없지만 기본 데이터 형식의 포장 클래스를 사용할 수 있습니다.
  • 매개 변수화된 유형의 그룹을 만들 수 없습니다. 예를 들어 ArrayList[]st=new ArrayList[10];이렇게 성명하는 것은 잘못된 것이다.유형을 지운 후 st의 유형은 ArrayList[]입니다.데이터 유형이 손실됩니다.설명이 필요한 것은, 이 그룹을 만들 수 없을 뿐, 성명 형식이 ArrayList[]st인 변수는 여전히 합법적입니다.그러나 new Array List[10]로 이 변수를 초기화할 수 없습니다.
  • 실례화할 수 없는 유형 변수는 실례화할 수 없는 대상이다.예: 위의 A클래스.a=new T();이렇게 하는 것은 잘못된 것이다.유형을 지운 후 T를 Object로 변경합니다.합리적이지만 Object 대상을 만드는 것도 자신의 목적이 아니다.
  • 일반 그룹을 구성할 수 없습니다. 형식을 통해 지우면 그룹의 데이터 형식은 사라집니다. (한정된 형식이나 Object입니다.)그러나 이 구조수 그룹은 사유 변수일 수 있다.이렇게 하면 외부 클래스를 호출할 수 없습니다. 형식 변환을 할 수 있습니다.
  • 일반 클래스의 정적 상하문에서 형식 변수가 잘못되었습니다
  • 범형류를 던지거나 포획할 수 없는 실례
  • 검사 예외를 제거할 수 있음
  • 6. 일반 유형의 계승 규칙
    S와 T가 어떤 관계가 있든지 간에 보통 ArrayList와 ArrayList는 아무런 관계가 없다.S와 T가 상속 관계가 있어도 ArrayList와 ArrayList는 상속 관계가 없다는 것도 이해할 수 있다.
    아래의 내용은 자신이 본 것이 비교적 간단명료하다.심지어 이해하지 못했다.자바 핵심 기술권에서 배웠습니다.단지 자신이 기억할 수 있도록 나중에 쉽게 찾을 수 있도록 하기 위해서다.사내들이 한꺼번에 가져갔으면 좋겠어.흰둥이가 필요할 때 다시 굽는다이하 대행.
    7. 와일드카드
    초유형 한정이 있는 어댑터는 일반 대상에 쓸 수 있고, 하위 형식 한정이 있는 어댑터는 일반 대상에서 읽을 수 있다.

    좋은 웹페이지 즐겨찾기