Java 범용 인스턴스 상세 정보

6414 단어 java범용
Java 범주를 이해하는 가장 간단한 방법은 이를 편리한 문법으로 간주하여 일부 Java 형식 변환 (casting) 의 조작을 절약하는 것이다.

      List<Apple> box = ...;
 	Apple apple = box.get(0);
위의 코드 자체가 명확하게 표현되었습니다:box는 Apple 대상이 설치된 List입니다.get 방법은 Apple 대상의 실례를 되돌려줍니다. 이 과정은 형식 변환이 필요하지 않습니다.범용 없음, 위의 코드는 다음과 같이 써야 합니다.

      List box = ...;
 	Apple apple = (Apple) box.get(0);
분명히 범주형의 주요 장점은 컴파일러가 매개 변수의 유형 정보를 보존하고 유형 검사를 실행하며 유형 변환 작업을 수행하는 것이다. 컴파일러는 이러한 유형 변환의 절대적인 오류를 보장한다.프로그래머에 의존하여 대상의 형식, 실행 형식의 전환을 기억하는 것보다 프로그램이 실행될 때 실패하고 디버깅과 해결이 어려울 수 있으며, 컴파일러는 프로그래머가 컴파일할 때 대량의 형식 검사를 강제로 하고 오류를 발견하도록 도와줄 수 있다.
범형의 구성
범형의 구성에서 유형 변수의 개념을 끌어냈다.Java 언어 사양에 따라 유형 변수는 다음과 같은 경우에 따라 제한 없는 플래그쉽입니다.
범용 클래스 선언
범용 인터페이스 선언
범용 방법 성명
범용 구조기 (constructor) 성명
범용 클래스 및 인터페이스
만약 한 종류나 인터페이스에 하나 이상의 유형 변수가 있다면, 그것은 바로 범형이다.유형 변수는 클래스 또는 인터페이스 이름 뒤에 있는 괄호로 정의됩니다.

public interface List<T> extends Collection<T> {
	...
	}
간단하게 말하면 형식 변수가 하는 역할은 하나의 매개 변수와 같아서 컴파일러가 형식 검사에 사용할 정보를 제공한다.
Java 라이브러리의 많은 종류, 예를 들어 전체 Collection 프레임워크는 범용화된 수정을 했다.예를 들어 우리가 위의 첫 번째 코드에서 사용한 List 인터페이스는 범용 클래스이다.그 코드에서box는 List < Apple > 대상입니다. 이것은 Apple 형식 변수가 있는 List 인터페이스의 클래스 구현의 실례입니다.컴파일러는 이 형식 변수 파라미터를 사용하여 get 방법이 호출되고 Apple 대상이 되돌아올 때 자동으로 형식 변환을 합니다.
실제로 이 새로 나온 범용 태그, 또는 이 List 인터페이스의 get 방법은 다음과 같다.
T get(int index);
get 방법은 실제적으로 T 형식의 대상을 되돌려줍니다. T는 List 성명에 있는 형식 변수입니다.
범용 방법 및 구조기(Constructor)
매우 비슷하다. 만약 방법과 구조기에 하나 이상의 유형 변수가 성명되어 있다면 그것들도 범형화할 수 있다.
public static T getFirst(List list)
이 방법은 List 형식의 매개 변수를 받아들여 T 형식의 대상을 되돌려줍니다.자바 라이브러리에서 제공하는 범용 클래스를 사용할 수도 있고, 자신의 범용 클래스를 사용할 수도 있다.형식이 안전한 쓰기 데이터... 다음 코드는 예입니다. List < String > 실례를 만들고 데이터를 불러옵니다.

List<String> str = new ArrayList<String>();
 	str.add("Hello ");
 	str.add("World.");
List에서 다른 객체를 로드하려고 하면 컴파일러가 오류를 표시합니다.
str.add(1);
형식 안전한 데이터 읽기...
List 객체를 사용할 때 String 객체는 다음과 같습니다.
String myString = str.get(0);
반복: 클래스 라이브러리의 많은 종류, 예를 들어 Iterator, 기능이 모두 강화되고 범용화되었다.List 인터페이스에 있는iterator () 방법은 현재 Iterator 로 되돌아옵니다. Tnext () 방법으로 되돌아오는 대상은 더 이상 형식 변환을 할 필요가 없습니다. 정확한 형식을 얻을 수 있습니다.

for (Iterator<String> iter = str.iterator(); iter.hasNext();) {
	String s = iter.next();
	System.out.print(s);
	}
foreach를 사용하면'for each'문법도 범주형에 도움이 된다.앞의 코드는 다음과 같이 쓸 수 있다.

for (String s: str) {
	System.out.print(s);
	}
이렇게 하면 읽기도 쉽고 유지하기도 쉽다.
자동 봉인(Autoboxing)과 자동 봉인(Autounboxing), 자바 범주를 사용할 때 autoboxing/autounboxing 두 가지 특징은 아래의 코드와 같이 자동으로 사용됩니다.

List<Integer> ints = new ArrayList<Integer>();
 	ints.add(0);
	ints.add(1);
 	
	int sum = 0;
	for (int i : ints) {
 	sum += i;
 	}
그러나 당신이 알아야 할 것은 봉인과 봉인 해제는 성능상의 손실을 가져올 수 있다는 것이다. 모든 것은 신중하게 사용해야 한다.
범주형은 JavaSE 1.5의 새로운 특성으로 범주형의 본질은 매개 변수화 유형이다. 즉, 조작된 데이터 형식이 하나의 매개 변수로 지정된다는 것이다.이런 매개 변수 유형은 클래스, 인터페이스와 방법의 생성에 사용할 수 있는데 각각 범용 클래스, 범용 인터페이스, 범용 방법이라고 부른다.
Java 언어의 범용 도입의 장점은 안전하고 간단하다는 것이다.
Java SE 1.5 이전에 범용이 없는 상황에서 유형 Object에 대한 인용을 통해 매개 변수의'임의화'를 실현했다. 임의화는 현저한 강제 형식 전환을 해야 한다는 단점을 가져왔다. 이런 전환은 개발자가 실제 매개 변수 유형에 대해 예측할 수 있는 상황에서 이루어진 것이다.강제 형식 변환 오류의 경우 컴파일러가 오류를 표시하지 않고 실행할 때 이상이 발생할 수 있습니다. 이것은 안전 위험입니다.
범형의 장점은 컴파일할 때 유형의 안전을 검사하고 모든 강제 변환이 자동적이고 은밀하게 되어 코드의 중용률을 높이는 것이다.
범용 모델은 사용 중에 몇 가지 규칙과 제한이 있다.
1. 범용 유형 매개 변수는 클래스 유형 (사용자 정의 클래스 포함) 일 수 있을 뿐 단순 유형일 수 없습니다.
2. 같은 범주형은 여러 버전에 대응할 수 있고 매개 변수 유형이 확실하지 않기 때문에 서로 다른 버전의 범주형 클래스 실례는 호환되지 않는다.
3. 범용 유형 매개 변수는 여러 개 있을 수 있다.
4. 일반적인 매개 변수 형식은 extends 문장을 사용할 수 있다. 예를 들어.습관적으로 유계 유형이 되다.
5, 범용 매개변수 유형은 와일드카드 유형일 수도 있습니다.예를 들어 Class classType = Class입니다.forName(java.lang.String);
범형은 인터페이스, 방법 등이 있고 내용이 많아서 시간이 걸려야 이해하고 익히며 응용할 수 있다.여기서 제가 범형을 이해했을 때 쓴 두 가지 예(보는 인상에 따라 쓴 것)를 제시합니다. 같은 기능을 실현했습니다. 하나는 범형을 사용했고 하나는 사용하지 않았습니다. 비교를 통해 범형의 응용을 빨리 배울 수 있습니다. 이것은 기본적으로 범형의 70% 내용을 배웠습니다.
예1: 범용 사용

public class GenT {
 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 
 GenInteger intOb=new GenInteger(88);
 intOb.showTyep();
 int i= intOb.getOb();
 System.out.println("value= " + i);

 System.out.println("----------------------------------");

 // Gen String 
 GenString strOb=new GenString("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) {
// 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
이것을 똑똑히 보면 앞으로 기본적인 범용 응용과 코드 읽기는 문제가 되지 않을 것이다.
이상은 자바 범주에 대한 실례 분석입니다. 자바 범주를 공부하는 친구는 참고할 수 있습니다.

좋은 웹페이지 즐겨찾기