와일드카드(Wildcard)
📌 와일드카드(Wildcard)
📌 제네릭 메소드와 와일드 카드 기반 메소드는 기능적으로 같은 역할을 함.
→ 상호 대체 가능.
📌 와일드 카드(Wildcard) 사용 이유
: 코드 간결.
📄 WildcardTest.java
package generics;
class Box4<T> { // 제네릭 기반의 클래스.
private T ob;
public void set(T o) { ob = o; }
public T get() { return ob; }
@Override
public String toString() {
return ob.toString();
}
}
class Unboxer {
public static <T> T openBox(Box4<T> box) {
return box.get();
}
// public static <T> void peekBox(Box4<T> box) { // 제네릭 메소드.
public static void peekBox(Box4<?> box) { // 와일드 카드.
System.out.println(box);
}
}
public class WildcardTest {
public static void main(String[] args) {
Box4<String> box = new Box4<>();
box.set("Hello");
Unboxer.peekBox(box); // Hello
}
}
와일드카드(Wildcard) - 상한 제한, 하한 제한
📌 상한 제한된 와일드 카드(Upper-Bounded Wildcards)
Box<? extends Number> box
→ Box<T> 인스턴스를 참조하는 참조변수 box.
Box<T> 인스턴스의 T는 Number 또는 Number을 상속하는 하위 클래스여야 함.
public static void peekBox(Box<? extends Number> box) {
Systmem.out.println(box);
}
→ Box<Integer>, Box<Double>과 같은 제네릭 타입의 인스턴스만 인자로 받을 수 있음.
📌 하한 제한된 와일드 카드(Lower-Bounded Wildcards)
Box<? super Integer> box
→ Box<T> 인스턴스를 참조하는 참조변수 box.
Box<T> 인스턴스의 T는 Integer 또는 Integer가 상속하는 클래스여야 함.
public static void peekBox(Box<? super Integer> box) {
System.out.println(box);
}
→ Box<Integer>, Box<Number>, Box<Object>만 인스턴스 인자로 받을 수 있음.
'Java > Java' 카테고리의 다른 글
[Java] 컬렉션 프레임워크 - Set<E> 인터페이스 (0) | 2022.10.18 |
---|---|
[Java] 컬렉션 프레임워크 - List<E> 인터페이스 (0) | 2022.10.18 |
[Java] 제네릭(Generics) (0) | 2022.10.18 |
[Java] Array 클래스 (0) | 2022.10.17 |
[Java] StringTokenizer 클래스 (0) | 2022.10.17 |
댓글