컴퓨터프로그래밍

자바 제네릭 : 설명 및 방법

자바 언어의 출현과 함께 시작은 의심 할 여지없이 그 기능에 긍정적 인 순간을 가져온 변화를 많이 겪었다. 이러한 중요한 변화 중 하나는 자바 일반 또는 일반화의 도입이다. 이 기능은 단지 언어가보다 유연하고 다양한뿐만 아니라 데이터 형식을 가져 오는 측면에서 훨씬 더 안전하지.

사실은 자바 일반적인 코드에서 제네릭의 도입에 앞서이 유형 참조 개체의 측면에서뿐만 아니라, 생성 될 수 있다는 것이다. 이러한 링크는 모든 객체를 할당 할 수 있습니다. 결국, 자바 클래스는 암시 Object 클래스의 상속자입니다. 그러나이 방법은 대상 유형 개체에서 개체의 명백한 변환의 보안 유형에 관련된 많은 오류의 잠재적 인 소스입니다. 일반화를 사용하는 경우 모든 캐스트 오류도 가능성을 제거, 암시 적으로 자동으로 수행됩니다.

자바 제네릭 : 설명 및 예

우리가 아래 그림에서 정규 수업에 일반화의 응용 프로그램의 간단한 예를 생각해 보자. 그리고 모든 미묘한 및 Java 일반의 뉘앙스에 대한 자세한 검사를 진행합니다.

클래스 선언이 쌍을 발생하는 방식에주의를 기울이십시오. 즉시 클래스 이름 후, 문자를 표시 T. 오픈 각괄호, 특정 유형으로 대체한다,이 클래스의 인스턴스를 생성하는 과정에 충전제의 종류이다. 다음과 같이 보인다 : 페어 <정수> = OBJ 켤레 <정수> (). 대신 T의 T, V 또는 E.를 사용, 원칙적으로 모든 문자를 지정 할 수 있지만, 주목해야한다

참고 : 빈 남아있을 수 있습니다 생성자에서 참조 꺾쇠 괄호를 선언 할 때 대상 유형을 지정, 자바의 여덟 번째 버전부터 시작. 예는 상기와 같이 다시 쓸 수있다 : 그래서, 페어 <정수> = OBJ 켤레 <> ().

클래스는 필드, 링크, 당신이 그 편지를 사용할 수있는 방법에 의해 반환 된 객체의 특정 유형 대신 자신의 몸에 후, 같은 방식으로 선언됩니다. T 때문에 클래스 개체,이 경우 제 1 및 제 2 필드는 정수형 것이다 특정 유형으로 대체 만들 때.

인수 및 firstItem과 secondItem의 논리에 따라, 또한 정수 유형 또는 서브 클래스이어야 적절한 생성자 언급했다. 객체를 생성 할 때 지정한 것과 다른 데이터 유형을 전송하려고하면, 컴파일러는이 실수를하지 않습니다. 따라서, 개체로 될 인수 생성자는 다음과 쌍 <정수> = OBJ 켤레 <> (새로운 정수 (1), 새로운 정수 (2)). 동일은 인수 및 방법 setFirst setSecond에 적용됩니다. 그리고 당신은 아마, 방법, getFirst와 getSecond 짐작와 정수 유형의 값을 반환한다.

여러 매개 변수 클래스 유형의 일반화

일반적인 클래스에도 쉼표 각괄호에 설정된 여러 종류의 파라미터를 선언 할 수있다. 페어 클래스는 아래에 제시하는 경우에 의해 재 설계.

당신이 볼 수 있듯이 당신이 꺾쇠 괄호이 클래스의 인스턴스를 생성 할 때, 매개 변수와 같은 종류의 같은 번호를 표시해야합니다. 당신이지도와 같은 데이터 구조의이 유형에 익숙하다면, 당신은 정확히 같은 원리를 사용하고 있음을 알 수있다. 값의 유형 -이 첫 번째 인수는 키의 유형 및 초를 지정합니다. 전송의 종류는 오브젝트 인수가 중첩 될 때 주목해야한다. 예를 들어, 다음 광고 쌍의 클래스 인스턴스 절대적으로 올바른 : 쌍 <문자열, 문자열> OBJ.

일반화의 일부 기능

더 진행하기 전에, 자바 컴파일러는 클래스 쌍의 다른 버전을 생성하지 않음을 유의해야한다. 사실, 일반화 된 유형의 모든 정보를 컴파일하는 과정에서 삭제됩니다. 대신 쌍 클래스의 특별 버전을 만들어 해당 유형을 가져온다. 그러나 프로그램에서 여전히 클래스의 제네릭이있다. 이 과정은 자바 일반 청소 유형이라고합니다.

중요한 점에 유의하십시오. 같은 자바 제네릭 클래스의 다른 버전에 대한 링크는 하나의 동일한 개체를 가리킬 수 없습니다. 쌍 <정수>으로 obj1과 쌍 <더블> obj2보다 : 즉, 우리가 두 개의 링크가 있다고 가정합니다. 따라서, 라인 OBJ1 = obj2보다 오류. 두 변수가 쌍 타입이지만, 물체는 이들이 참조 다르다. 이 자바 일반 보안 유형의 대표적인 예이다.

일반적인 클래스에 대한 제한

그것은 일반화 유형을 참조하는 경우에만 적용 할 수 있다는 것을 알고하는 것이 중요하다, 그 매개 변수를 클래스 유형이어야합니다 제네릭 클래스 자바 인수를 전달하는 것입니다. 블룸 긴 예컨대, 이러한 간단한 형식은, 전송 될 수 없다. 즉, 다음 줄 쌍의 클래스 선언은 허용되지 않습니다 : 쌍 OBJ. 각 원시 유형에 대한 대응 자바 래퍼 클래스가 존재하지만,이 제한은 심각한 문제가 아니다. 엄밀히 말하면, 클래스 쌍은 당신이 정수와 부울 값 avtoupakovka 모든 것을 당신을 위해 수행 캡슐화하려면 : 쌍 <정수, 부울> OBJ = 새로운 쌍 <> (25, true)를.

또 다른 심각한 제한은 매개 변수 유형의 인스턴스를 생성 할 수 없다는 것입니다. 예를 들어, 다음 줄은 컴파일 오류가 발생합니다 : T 첫째 = 새로운 T를 (). 인수는 전체 클래스 또는 추상, 또는 인터페이스를 통과했는지 여부를 사전에 알 수 없기 때문에 이것은 분명하다. 같은 배열을 만들어 간다.

제한 유형

이 제네릭 클래스를 자바 인수로 전달 될 수있는 유형의 목록을 제한 할 필요가있을 때 종종 경우가 있습니다. 우리의 클래스 쌍에 우리는 그들에 대한 자세한 수학 연산에 대해서만 수치를 캡슐화 원하는 가정하자. 이를 위해 우리는 매개 변수 유형의 상한을 정의 할 필요가있다. 그것은 꺾쇠 괄호에 전달 된 모든 인수를 상속 슈퍼 클래스 광고에 의해 실현된다. 그것은 다음과 같이 보일 것이다 : 클래스 쌍 . 이와 같이, 컴파일러는 찾은 파라미터 T는 치환 또는 번호 클래스 또는 하위 클래스 중 하나 일 수 대신.

이것은 일반적인 수신입니다. 이러한 제한은 종종 하나의 동일한 클래스에서 호환성 유형 매개 변수를 제공하는 데 사용됩니다. 우리 반 쌍의 예를 생각해 클래스 쌍 . 여기에서 우리는 T 타입은 임의의 수 있습니다 컴파일러에게, 그리고 V 타입은 T 타입 또는 그 서브 클래스 중 하나이어야합니다.

은 "바닥"을 제한하면 동일한 방식이지만, 대신에 단어 단어 슈퍼 철자를 확장합니다. 즉, 클래스 분류 페어 대신 T의 ArrayList를가하거나 상속 어떤 클래스 또는 인터페이스 또는 치환 될 수 있다고 말한다.

일반 Java 메소드와 생성자

자바에서 일반화는 방법 만 클래스에하지 적용 할 수 있지만. 예를 들어, 일반적인 방법은 일반 교실에서 선언 할 수 있습니다.

위의 그림에서 보는 바와 같이, 광고 일반화 된 방법은 더 큰 문제가 없다. 메소드의 반환 형식은 꺾쇠 괄호를 넣어 그 안에 유형 매개 변수를 지정하기 전에 충분히.

모든 것이 생성자와 유사 할 경우 :

이 경우 꺾쇠 괄호는 그는 더 리턴 값이 없기 때문에, 디자이너의 이름 앞에 넣어. 두 프로그램의 결과는 다음과 같습니다

정수

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 ko.delachieve.com. Theme powered by WordPress.