Wildcards

μ œλ„€λ¦­ μ½”λ“œμ—μ„œ λ¬ΌμŒν‘œ (question mark : ?) λ₯Ό μ™€μΌλ“œ μΉ΄λ“œλΌκ³  λΆ€λ¦°λ‹€.

이 μ™€μΌλ“œ μΉ΄λ“œλŠ” κ·œμ •λ˜μ§€ μ•Šμ€ νƒ€μž…μ„ μ˜λ―Έν•˜λŠ”λ° μ•„λž˜μ™€ 같은 λ‹€μ–‘ν•œ μƒν™©μ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

  • νƒ€μž… νŒŒλΌλ©”ν„°
  • ν•„λ“œ
  • 지역 λ³€μˆ˜
  • λ°˜ν™˜ νƒ€μž…

μœ„ 경우 외에도 λ§Žμ€ κ³³μ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

Java λ₯Ό ν¬ν•¨ν•œ Morden Language 듀은 일반적으둜 μ•„λž˜ 3κ°€μ§€μ˜ Type Bounded ν•œ κ°œλ…μ„ μ§€μ›ν•œλ‹€.

Upper Bounded

ꡬ체적인 λ°©ν–₯으둜 νƒ€μž… λ³€ν™˜μ„ ν—ˆμš©ν•œλ‹€.

자기 μžμ‹ μ˜ μžμ‹ 객체만 ν—ˆμš©λœλ‹€. (λ¦¬μŠ€μ½”ν”„ 법칙 ν—ˆμš©)

Β 






public static double sumOfList(List<? extends Number> list) {
  double s = 0.0;
  for (Number n : list)
    s += n.doubleValue();
  return s;
}
List<Integer> li = Arrays.asList(1, 2, 3);
List<Double> li = Arrays.asList(1.2, 2.3, 3.5);

Lower Bounded

좔상적인 λ°©ν–₯으둜만 νƒ€μž…μ΄ ν—ˆμš©λœλ‹€.

자기 μžμ‹ κ³Ό λΆ€λͺ¨μ˜ 객체만 ν—ˆμš©ν•œλ‹€.

Β 





public static void addNumber(List<? super Integer> list) {
  for (int i = 1; i <= 10; i++) {
    list.add(i);
  }
}

Unbounded

자기 μžμ‹ μ˜ νƒ€μž…λ§Œ ν—ˆμš©ν•œλ‹€.

List<Integer> listInteger = Arrays.asList(1, 2, 3);

List<String> listString = Arrays.asList("one", "two", "three");