Groovy-제네릭
제네릭은 클래스, 인터페이스 및 메소드를 정의 할 때 유형 (클래스 및 인터페이스)이 매개 변수가되도록합니다. 메서드 선언에 사용되는보다 친숙한 형식 매개 변수와 마찬가지로 형식 매개 변수는 다른 입력으로 동일한 코드를 재사용 할 수있는 방법을 제공합니다. 차이점은 형식 매개 변수에 대한 입력은 값이고 유형 매개 변수에 대한 입력은 유형이라는 것입니다.
컬렉션 용 일반
List 클래스와 같은 컬렉션 클래스는 해당 유형의 컬렉션 만 애플리케이션에서 허용되도록 일반화 할 수 있습니다. 일반화 된 ArrayList의 예는 다음과 같습니다. 다음 명령문은 문자열 유형의 목록 항목 만 허용한다는 것입니다.
List<String> list = new ArrayList<String>();
다음 코드 예제에서 다음을 수행합니다.
- 문자열 만 보유 할 일반화 된 ArrayList 컬렉션 만들기.
- 목록에 3 개의 문자열을 추가합니다.
- 목록의 각 항목에 대해 문자열 값을 인쇄합니다.
class Example {
static void main(String[] args) {
// Creating a generic List collection
List<String> list = new ArrayList<String>();
list.add("First String");
list.add("Second String");
list.add("Third String");
for(String str : list) {
println(str);
}
}
}
위 프로그램의 출력은 다음과 같습니다.
First String
Second String
Third String
일반화 클래스
전체 클래스를 일반화 할 수도 있습니다. 이것은 클래스가 모든 유형을 받아들이고 그 유형에 따라 작업 할 때 더 유연하게 만듭니다. 이를 달성 할 수있는 방법의 예를 살펴 보겠습니다.
다음 프로그램에서 우리는 다음 단계를 수행합니다.
ListType이라는 클래스를 만들고 있습니다. 클래스 정의 앞에있는 <T> 키워드에 유의하십시오. 이것은 컴파일러에게이 클래스가 모든 유형을 받아 들일 수 있음을 알려줍니다. 따라서이 클래스의 객체를 선언 할 때 선언 중에 유형을 지정할 수 있으며 해당 유형은 자리 표시 자 <T>에서 대체됩니다.
제네릭 클래스에는 클래스에 정의 된 멤버 변수와 함께 작동하는 간단한 getter 및 setter 메서드가 있습니다.
메인 프로그램에서 ListType 클래스의 객체를 선언 할 수 있지만 다른 유형의 객체를 선언 할 수 있습니다. 첫 번째는 Integer 유형이고 두 번째는 String 유형입니다.
class Example {
static void main(String[] args) {
// Creating a generic List collection
ListType<String> lststr = new ListType<>();
lststr.set("First String");
println(lststr.get());
ListType<Integer> lstint = new ListType<>();
lstint.set(1);
println(lstint.get());
}
}
public class ListType<T> {
private T localt;
public T get() {
return this.localt;
}
public void set(T plocal) {
this.localt = plocal;
}
}
위 프로그램의 출력은 다음과 같습니다.
First String
1