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