자바 범 형의 이해 와 등가 실현

6868 단어
자바 범 형의 이해 와 등가 실현
http://lavasoft.blog.51cto.com/62575/42400
범 형 은 JAVA SE 1.5 의 새로운 특성 으로 범 형의 본질은 매개 변수 화 유형 이다. 즉, 작 동 하 는 데이터 형식 이 하나의 매개 변수 로 지정 되 었 다 는 것 이다.이런 매개 변수 유형 은 클래스, 인터페이스 와 방법의 생 성에 사용 할 수 있 는데 각각 범 형 클래스, 범 형 인터페이스, 범 형 방법 이 라 고 부른다.
JAVA 언어 가 범 형 을 도입 하 는 장점 은 안전 하고 간단 하 다 는 것 이다.
JAVA SE 1.5 이전 에는 범 형 이 없 는 상태 에서 타 입 오 브 젝 트 에 대한 인용 을 통 해 매개 변수의 '임 의 화' 를 구현 하고, '임 의 화' 가 가 져 온 단점 은 명시 적 인 강제 타 입 전환 을 해 야 하 는데, 이러한 전환 은 개발 자가 실제 매개 변수 타 입 을 예지 할 수 있 는 상황 에서 이 뤄 지도 록 하 는 것 이다.강제 형식 변환 오류 의 경우 컴 파일 러 가 오 류 를 알 리 지 않 고 실행 할 때 만 이상 이 발생 할 수 있 습 니 다. 이것 은 안전 위험 입 니 다.
일반적인 장점 은 컴 파일 할 때 유형 이 안전 하고 모든 강제 변환 이 자동 과 암시 적 이 며 코드 의 재 활용 율 을 높 인 다 는 것 이다.
범 형 은 사용 중 에 몇 가지 규칙 과 제한 이 있다.
1. 일반적인 유형 매개 변 수 는 클래스 유형 (사용자 정의 클래스 포함) 일 수 있 고 간단 한 유형 일 수 없습니다.
2. 같은 범 형 은 여러 버 전 (매개 변수 유형 이 불확실 하기 때문에) 에 대응 할 수 있 고 서로 다른 버 전의 범 형 인 스 턴 스 는 호 환 되 지 않 습 니 다.
3. 일반적인 유형의 매개 변 수 는 여러 개 있 을 수 있 습 니 다.
4. 일반적인 매개 변수 유형 은 extends 문 구 를 사용 할 수 있 습 니 다. 예 를 들 어 < T extends superclass > 입 니 다.습관 적 으로 '유 계 유형' 이 되다.
5. 일반적인 매개 변수 유형 은 마스크 형식 일 수도 있 습 니 다.예 를 들 어 클래스 classType = Class.forName(java.lang.String);
범 형 은 인터페이스, 방법 등 도 있 고 내용 이 많 기 때문에 한 번 의 노력 을 들 여야 이해 하고 익히 며 응용 할 수 있다.여기 서 제 가 범 형 을 알 았 을 때 쓴 두 가지 예 (보 는 인상 에 따라 쓴 것) 를 제시 하고 똑 같은 기능 을 실 현 했 습 니 다. 하 나 는 범 형 을 사 용 했 고 하 나 는 사용 하지 않 았 습 니 다. 대 비 를 통 해 범 형의 응용 을 빨리 배 울 수 있 습 니 다. 이 는 대체적으로 범 형 70% 의 내용 을 배 웠 습 니 다.
아마 너 는 기다 릴 수 없 을 것 이다. 지금 바로 소스 코드 를 붙 여 라.
예 1: 범 형 을 사용 했다
살펴보다
클립보드 로 복사
인쇄 하 다.
public class Gen {        private T ob;   //일반 구성원 변 수 를 정의 합 니 다.            public Gen(T ob) {            this.ob = ob;        }             public T getOb() {            return ob;        }             public void setOb(T ob) {            this.ob = ob;        }             public void showTyep() {            System. out. println ("T 의 실제 유형 은: " + ob.getClass().getName());        }    }         public class GenDemo {        public static void main(String[] args){            //범용 클래스 Gen 의 Integer 버 전 을 정의 합 니 다.           Gen intOb=new Gen(88);            intOb.showTyep();            int i= intOb.getOb();            System.out.println("value= " + i);                 System.out.println("----------------------------------");                 //범용 클래스 Gen 의 String 버 전 을 정의 합 니 다.           Gen strOb=new Gen("Hello Gen!");            strOb.showTyep();            String s=strOb.getOb();            System.out.println("value= " + s);        }    }  
public class Gen<T> {
    private T ob;   //        
 
    public Gen(T ob) {
        this.ob = ob;
    }
 
    public T getOb() {
        return ob;
    }
 
    public void setOb(T ob) {
        this.ob = ob;
    }
 
    public void showTyep() {
        System.out.println("T      : " + ob.getClass().getName());
    }
}
 
public class GenDemo {
    public static void main(String[] args){
        //     Gen   Integer  
        Gen<Integer> intOb=new Gen<Integer>(88);
        intOb.showTyep();
        int i= intOb.getOb();
        System.out.println("value= " + i);
 
        System.out.println("----------------------------------");
 
        //     Gen   String  
        Gen<String> strOb=new Gen<String>("Hello Gen!");
        strOb.showTyep();
        String s=strOb.getOb();
        System.out.println("value= " + s);
    }
}
예 2: 범 형 을 사용 하지 않 았 습 니 다.
살펴보다
클립보드 로 복사
인쇄 하 다.
public class Gen2 {        private Object ob;      //유 니 버 설 형식 구성원 정의            public Gen2(Object ob) {            this.ob = ob;        }             public Object getOb() {            return ob;        }             public void setOb(Object ob) {            this.ob = ob;        }             public void showTyep() {            System. out. println ("T 의 실제 유형 은: " + ob.getClass().getName());        }    }              public class GenDemo2 {        public static void main(String[] args) {            //클래스 Gen 2 의 Integer 버 전 을 정의 합 니 다.           Gen2 intOb = new Gen2(new Integer(88));            intOb.showTyep();            int i = (Integer) intOb.getOb();            System.out.println("value= " + i);                 System.out.println("----------------------------------");                 //클래스 Gen 2 의 String 버 전 을 정의 합 니 다.           Gen2 strOb = new Gen2("Hello Gen!");            strOb.showTyep();            String s = (String) strOb.getOb();            System.out.println("value= " + s);        }    }  
public class Gen2 {
    private Object ob;      //          
 
    public Gen2(Object ob) {
        this.ob = ob;
    }
 
    public Object getOb() {
        return ob;
    }
 
    public void setOb(Object ob) {
        this.ob = ob;
    }
 
    public void showTyep() {
        System.out.println("T      : " + ob.getClass().getName());
    }
}
 
 
public class GenDemo2 {
    public static void main(String[] args) {
        //   Gen2   Integer  
        Gen2 intOb = new Gen2(new Integer(88));
        intOb.showTyep();
        int i = (Integer) intOb.getOb();
        System.out.println("value= " + i);
 
        System.out.println("----------------------------------");
 
        //   Gen2   String  
        Gen2 strOb = new Gen2("Hello Gen!");
        strOb.showTyep();
        String s = (String) strOb.getOb();
        System.out.println("value= " + s);
    }
}
실행 결과:
두 가지 예 에서 Demo 를 실행 한 결 과 는 같 습 니 다. 콘 솔 출력 결 과 는 다음 과 같 습 니 다.
T 의 실제 유형 은: java. lang. Integer
value= 88
----------------------------------
T 의 실제 유형 은 java. lang. String 입 니 다.
value= Hello Gen!
Process finished with exit code 0
이것 을 똑똑히 보면 앞으로 기본 적 인 범용 응용 과 코드 읽 기 는 문제 가 되 지 않 을 것 이다.
1. 일반적인 '유 니 버 설 문자':
: T 는 Comparable 을 실현 한 유형 임 을 나타 낸다 ('범 형' 에서 extends 는 extends 또는 implement 를 나타 낸다)
: T 또는 T 의 부모 형 이 어야 함 을 나타 낸다.
ArrayList : Animal 의 종 류 를 실현 하거나 계승 하 는 요소 형식의 ArrayList
2. 같은 기능 의 다른 문법:
public
void takeThing(ArrayList list);
public void takeThing (ArrayList
list);

좋은 웹페이지 즐겨찾기