자바 범 형의 이해 와 등가 실현
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
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 또는 T 의 부모 형 이 어야 함 을 나타 낸다.
ArrayList : Animal 의 종 류 를 실현 하거나 계승 하 는 요소 형식의 ArrayList
2. 같은 기능 의 다른 문법:
public
public void takeThing (ArrayList
list);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.