와일드카드
<aside> 🕕
설명
예제
<aside> 🎍
package generic.ex5;
import generic.animal.Animal;
public class WildcardEx {
static <T> void printGenericV1(Box<T> box) {
System.out.println("T = " + box.get());
}
//와일드 카드
static void printWildcardV1(Box<?> box) {
System.out.println("? = " + box.get());
}
static <T extends Animal> void printGenericV2(Box<T> box) {
T t = box.get();
System.out.println("이름 = " + t.getName());
}
//와일드 카드
static void printWildcardV2(Box<? extends Animal> box) {
Animal animal = box.get();
System.out.println("이름 = " + animal.getName());
}
static <T extends Animal> T printAndReturnGeneric(Box<T> box) {
T t = box.get();
System.out.println("이름 = " + t.getName());
return t;
}
//와일드 카드
static Animal printAndReturnWildcard(Box<? extends Animal> box) {
Animal t = box.get();
System.out.println("이름 = " + t.getName());
return t;
}
}
--------------------------------------
package generic.ex5;
import generic.animal.Animal;
import generic.animal.Cat;
import generic.animal.Dog;
public class WildcarMain1 {
public static void main(String[] args) {
Box<Object> objBox = new Box<>();
Box<Dog> dogBox = new Box<>();
Box<Cat> catBox = new Box<>();
dogBox.set(new Dog("멍멍이", 100));
WildcardEx.printGenericV1(dogBox);
//와일드 카드
WildcardEx.printWildcardV1(dogBox);
WildcardEx.printGenericV2(dogBox);
//와일드 카드
WildcardEx.printWildcardV2(dogBox);
Dog dog = WildcardEx.printAndReturnGeneric(dogBox);
//와일드 카드
Animal animal = WildcardEx.printAndReturnWildcard(dogBox);
}
}
구조 차이
제네릭 타입
static <T "상속"> T "메서드명"(제네릭명<T> 변수 명) {
}
와일드 카드
static "반환 타입" "메서드명"(제네릭명<? "상속"> 변수 명) {
}
</aside>
와일드카드 vs 제네릭 메서드
<aside> 🔇
설명