자바 제네릭은 자바 언어의 가장 중요한 특징 중 하나입니다. 뒤에 아이디어 제네릭이 매우 간단하다,그러나,그것은 때때로로 복잡하기 때문에 교대에서 일반적인 구문을 연결되어 있습니다.
이 튜토리얼의 목적은 이해하기 쉬운 방식으로이 유용한 제네릭 개념을 소개하는 것입니다.
그러나 제네릭 자체에 다이빙하기 전에 처음부터 Java 제네릭이 필요한 이유를 알아 보겠습니다.,
목적 Java 제네릭
의 도입 전에 제네릭 Java5,당신은 수를 작성하고 컴파일한 코드 조각은 이 같은 오류가 발생하지 않고나 경고:
추가할 수 있습니다 값은 모든 유형의 목록 또는 다른 Java 컬렉션을 하지 않고 선언하는 어떤 유형의 데이터를 저장합니다. 그러나 목록에서 값을 검색 할 때 명시 적으로 특정 유형으로 캐스팅해야합니다.위의 목록을 반복하는 것이 좋습니다.,
수 있도록 만들의 목록을 선언하지 않는 저장된 데이터의 유형으로 우리가 발생할 수 있는 프로그래머를 만들기 같은 실수를 위는ClassCastExceptions
중 런타임입니다.프로그래머가 그러한 실수를하지 않도록하기 위해 제네릭이 도입되었습니다.
제네릭을 사용하면 다음 예제에서 볼 수 있듯이 Java 컬렉션을 만들 때 저장 될 데이터 유형을 명시 적으로 선언 할 수 있습니다.,
이제할 수 없습니다 잘못을 저장하는 정수에서 문자열을 입력하지 않고 목록을 던지는 컴파일 타임 오류가 있습니다. 이렇게하면 프로그램이 런타임 오류로 실행되지 않습니다.
의 주요 목적의 소개 제네릭하 Java 었으로 실행하지 마십시오ClassCastExceptions
있습니다.
자바 제네릭 만들기
제네릭을 사용하여 자바 클래스와 메소드를 만들 수 있습니다., 각 유형의 제네릭을 만드는 방법의 예를 살펴 보겠습니다.
일반 Class
때 만들기 클래스 일반적인 유형을 위한 매개변수는 클래스가 추가 끝에서 클래스의 이름 안에 각<>
부류입니다.
여기에는T
는 데이터 유형 매개 변수입니다. T
,N
,andE
은 편지의 일부 사용을 위한 데이터 유형 매개변수에 따라 Java 있습니다.,위의 예에서 GenericClass 객체를 만들 때 특정 데이터 유형을 전달할 수 있습니다.
일반 클래스 객체를 만들 때 기본 데이터 유형을 데이터 유형 매개 변수에 전달할 수 없습니다. 객체 유형을 확장하는 데이터 유형 만 유형 매개 변수로 전달할 수 있습니다.
예를 들어,
일반적인 방법
을 만드는 일반적 방법을 다음과 유사한 패턴을 만드는 일반됩니다. 제네릭 클래스 내부뿐만 아니라 제네릭이 아닌 메소드를 구현할 수 있습니다.,여기서 특정 유형의 배열을 전달하여 메소드를 매개 변수화 할 수 있습니다. 일반 메서드PrintItems()
는 전달 된 배열을 반복하고 일반 Java 메서드처럼 저장된 항목을 인쇄합니다.
제한 매개변수 유형
지금까지 일반적인 클래스와 방법을 우리가 생성할 수 있습니다 매개 변수가 있는 모든 데이터의 유형이 다른 것보다 기본 형식. 그러나 제네릭에 전달할 수있는 데이터 유형을 제한하고 싶다면 어떻게해야합니까? 이것은 경계 형 매개 변수가 들어오는 곳입니다.,
할 수밖에 없는 데이터 유형에 의해 허용되는 일반적인 클래스나 메소드를 지정하여야 하위 클래스의 다른 데이터를 입력합니다.
예를 들어,
여기에는UpperBoundedClass
및UpperBoundedMethod
될 수 있는 매개 변수가 있는 사용 특수형List
데이터를 입력합니다.
List
데이터 유형은 유형 매개 변수의 상한 역할을합니다. List
의 하위 유형이 아닌 데이터 유형을 사용하려고하면 컴파일 타임 오류가 발생합니다.경계는 클래스에만 국한되지 않습니다., 인터페이스도 전달할 수 있습니다. 인터페이스를 확장하는 것은이 경우 인터페이스를 구현하는 것을 의미합니다.
매개 변수는이 예제와 같이 여러 경계를 가질 수도 있습니다.
받아들이는 데이터 입력해야 하위 클래스의 동물 및 동물됩니다. 이 경계 중 하나가 클래스 인 경우 바운드 선언에서 먼저 와야합니다.위의 예에서 포유류가 클래스이고 동물이 인터페이스 인 경우 위의 그림과 같이 포유류가 먼저 와야합니다. 그렇지 않으면 코드가 컴파일 타임 오류를 발생시킵니다.,
Java 제네릭 와일드 카드
와일드 카드는 제네릭 형식의 매개 변수를 메서드에 전달하는 데 사용됩니다. 과는 달리,일반적 방법,여기에,일반적인 매개 변수가 전달된 매개 변수를 받아들여 방법에 의하여,다른 어떤 데이터 유형 매개변수 설명했습니다. 와일드 카드는?로 표시됩니다. 기호.
위의printItems()
방법이지 목록은 모든 데이터의 유형으로 매개 변수입니다. 이로 인해 프로그래머는 제네릭이없는 경우 일 다른 데이터 유형의 목록에 대해 코드를 반복 할 필요가 없습니다.,
상위 제한 와일드카드
우리가 원하는 경우를 제한 데이터 유형에 저장된 목록 허용한 방법에 의해,우리가 사용할 수 있는 제한됩니다.*
예:
printSubTypes()
방법이지만 목록을 저장하는 아형의 색상입니다. RedColor 또는 BlueColor 개체 목록을 허용하지만 동물 개체 목록은 허용하지 않습니다. 이것은 동물이 색의 하위 유형이 아니기 때문입니다. 이것은 상한 와일드 카드의 예입니다.,
낮은 경계에 와일드카드
마찬가지로 우리가 가진 경우:
그리고printSuperTypes()
방법만 허 목록을 저장하는 슈퍼 유형 개의 클래스입니다. 그것은 목록을 받아의 포유동물 또는 동물의 개체이지만 목록이 아닙 LabDog 개체기 때문에 LabDog 지 않는 수퍼 클래스의 강아지지만,하위 클래스. 이것은 경계가 낮은 와일드 카드의 예입니다.
결론
Java Generics 는 도입 이후 프로그래머가 없이는 살 수없는 기능이되었습니다.
이 인기는 프로그래머의 삶을보다 쉽게 만드는 데 미치는 영향 때문입니다., 코딩 실수를하지 못하게하는 것 외에도 제네릭을 사용하면 코드가 덜 반복됩니다. 다른 데이터 유형에 대해 코드를 반복 할 필요가 없도록 클래스와 메소드를 일반화하는 방법을 알았습니까?
제네릭을 잘 파악하는 것이 언어의 전문가가되기 위해 중요합니다. 따라서이 튜토리얼에서 배운 것을 실용적인 코드에 적용하는 것이 지금 앞으로 나아갈 수있는 방법입니다.피>