logo

Java의 와일드카드

Java Generics에서는 정확한 유형을 모르는 경우 와일드카드가 사용됩니다. 유연하고 재사용 가능한 코드를 작성할 수 있습니다. 와일드카드는 ?로 표시됩니다. (물음표). 와일드카드는 다양한 일반 유형을 안전하게 허용하기 위해 메소드 매개변수에 주로 사용됩니다.

Java의 와일드카드 유형

1. 상한 와일드카드

변수에 대한 제한을 완화하려는 경우 이러한 와일드카드를 사용할 수 있습니다. 예를 들어 List에서 작동하는 메서드를 작성하고 싶다고 가정해 보겠습니다.< Integer >목록< Double >및 목록< Number >상한 와일드카드를 사용하여 이 작업을 수행할 수 있습니다. 

상한 와일드카드를 선언하려면 와일드카드 문자('?')와 확장 키워드, 상한을 차례로 사용합니다. 



공개 정적 무효 추가(목록목록)

테스트 및 테스트 유형

구현:

Java
import java.util.Arrays; import java.util.List; class WildcardDemo {  public static void main(String[] args)  {  // Upper Bounded Integer List  List<Integer> list1 = Arrays.asList(4 5 6 7);  System.out.println('Total sum is:' + sum(list1));  // Double list  List<Double> list2 = Arrays.asList(4.1 5.1 6.1);  System.out.print('Total sum is:' + sum(list2));  }  private static double sum(List extends Number> list)  {  double sum = 0.0;  for (Number i : list) {  sum += i.doubleValue();  }  return sum;  } } 

산출
Total sum is:22.0 Total sum is:15.299999999999999

설명: 위 프로그램에서 list1은 Integer 값을 보유하고 list2는 Double 값을 보유합니다. 둘 다 와일드카드를 사용하는 sum 메소드로 전달됩니다.. 이는 Integer 또는 Double과 같은 Number의 하위 클래스인 유형의 목록을 허용할 수 있음을 의미합니다.

2. 하한 경계의 와일드카드

이는 와일드카드 문자('?'), super 키워드, 하한값을 사용하여 표현됩니다.

a-b 가지치기

통사론: 컬렉션 유형

구현: 

Java
import java.util.Arrays; import java.util.List; class WildcardDemo {  public static void main(String[] args)  {  // Lower Bounded Integer List  List<Integer> list1 = Arrays.asList(4 5 6 7);  // Integer list object is being passed  printOnlyIntegerClassorSuperClass(list1);  // Number list  List<Number> list2 = Arrays.asList(4 5 6 7);  // Integer list object is being passed  printOnlyIntegerClassorSuperClass(list2);  }  public static void printOnlyIntegerClassorSuperClass(  List super Integer> list)  {  System.out.println(list);  } } 

산출
[4 5 6 7] [4 5 6 7]

설명: 여기서 printOnlyIntegerClassorSuperClass 메소드는 Integer 또는 해당 수퍼클래스(Number와 같은)만 허용합니다. Double 목록을 전달하려고 하면 Double이 Integer의 슈퍼클래스가 아니기 때문에 컴파일 시간 오류가 발생합니다.

알파벳 번호

메모: 구조에서 값을 가져오려면 확장 와일드카드를 사용하고, 구조에 값을 입력할 때는 슈퍼 와일드카드를 사용하세요. 구조에 값을 가져오고 입력할 때 와일드카드를 사용하지 마세요. 와일드카드의 상한을 지정하거나 하한을 지정할 수 있지만 둘 다 지정할 수는 없습니다.

3. 무제한 와일드카드

이 와일드카드 유형은 List와 같은 와일드카드 문자(?)를 사용하여 지정됩니다. 이를 알 수 없는 유형 목록이라고 합니다. 이는 다음과 같은 경우에 유용합니다.

  • Object 클래스에서 제공하는 기능을 이용하여 사용할 수 있는 메소드를 작성할 때.
  • 코드가 유형 매개변수에 의존하지 않는 일반 클래스의 메소드를 사용하는 경우

구현:

Java
import java.util.Arrays; import java.util.List; class unboundedwildcardemo {  public static void main(String[] args)  {  // Integer List  List<Integer> list1 = Arrays.asList(1 2 3);  // Double list  List<Double> list2 = Arrays.asList(1.1 2.2 3.3);  printlist(list1);  printlist(list2);  }  private static void printlist(List list)  {  System.out.println(list);  } } 

산출
[1 2 3] [1.1 2.2 3.3]


퀴즈 만들기