"이제 새롭고 흥미로운 주제인 와일드카드입니다."

"본질적으로 이것은 무엇이든 일치하는 «*» 패턴과 같은 것입니다."

"하지만 처음부터 시작합시다."

"Warrior 클래스와 두 전사 중 어느 쪽이 더 강한지 결정하는 메서드가 있다고 상상해 보십시오. 다음과 같이 보일 수 있습니다."

예 1
class WarriorManager
{
 public static boolean fight(Warrior w1, Warrior w2)
 {
  return w1.power > w2.power;
 }
}
메서드 호출 예
MagicWarrior mag = new MagicWarrior();
ArcherWarrior archer = new ArcherWarrior();

boolean isMagicCooler = WarriorManager.fight(mag, archer);

"MagicWarrior와 ArcherWarrior는 모두 Warrior를 계승합니다. ."

"약간 단순하지만 예를 들어 그렇게 할 것입니다."

"좋아요."

"이제 여러 전사가 가담한 상황에서 비슷한 방법을 만들기로 했다고 가정해 봅시다."

예 1
class WarriorManager
{
 public static boolean fight(Warrior w1, Warrior w2)
 {
  return w1.power > w2.power;
 }

 public static boolean fight(List<Warrior> w1, List<Warrior> w2)
 {
  return 
 }
}
메서드 호출 예
ArrayList<MagicWarrior> magi = new ArrayList<MagicWarrior>();
for(int i = 0; i < 10; i++)
 magi.add(new MagicWarrior());

ArrayList<ArcherWarrior> archers = new ArrayList<ArcherWarrior>();
for(int i = 0; i < 10; i++)
 archers.add(new ArcherWarrior());

boolean isMagicCooler = WarriorManager.fight(magi, archers); // Compilation error!

"하지만 여기에서 컴파일 오류가 발생하고 무엇이 잘못되었을 수 있는지 의아해합니다."

"문제는 MagicWarrior가 Warrior를 상속 하고 MagicWarrior 개체를 fight(Warrior, Warrior) 메서드로 전달할 수 있다는 것입니다."

"그러나 List<MagicWarior> 는 List<Warrior> 를 상속하지 않습니다 . 따라서 거기에 전달할 수 없습니다!"

"물려받지 않는다는 게 무슨 뜻이야?"

"제 말은 하나는 목록이고 다른 하나는 목록이지만 유형 매개변수가 있다는 것입니다."

"네 말이 맞아. 어째서인지 바로 눈치채지 못했어. 그럼 이 문제에 대한 해결책은 이미 있는 거지?"

"예. 더 복잡한 구조를 사용해야 합니다. 다음과 같이 표시됩니다."

예 1
class WarriorManager
{
 public static boolean fight(Warrior w1, Warrior w2)
 {
  return w1.power > w2.power;
 }

 public static boolean fight(List<? extends Warrior> w1, List<? extends Warrior> w2)
 {
  return …
 }
}

"? 전사 확장" 부분은 "전사를 계승하는 모든 유형"을 의미합니다."

"즉, 이제 List<MagicWarrior> 및 List<ArcherWarrior>를 전달할 수 있으며 모든 것이 작동합니다."

"굉장하네요. 그런 문제가 적을수록 좋습니다."

"나도 그런 기분이야."

"하지만 Warrior를 상속하는 것이 필요하지 않다면 어떻게 해야 합니까? 유형 매개변수가 있는 모든 List를 메소드에 전달할 수 있기를 원하면 어떻게 합니까? 허용됩니까?"

"예, 두 가지 형식의 표기법이 있습니다."

List<? extends Object>
List<?>

"둘 다 같은 것을 의미하므로 일반적으로 두 번째 버전이 사용됩니다."

"오늘은 그게 다야."

"고마워 엘리. 오늘 정말 많이 배웠어."