κ°μ²΄μ νμ μ μ»΄νμΌ μμ 체ν¬ν΄μ£Όλ κΈ°λ₯
ν΄λμ€λ λ©μλμμ μ¬μ©ν λ΄λΆ λ°μ΄ν° νμ μ μ»΄νμΌ μμ 미리 μ§μ νλ λ°©λ²
ν΄λμ€ λ΄λΆμμ μ§μ νλ κ²μ΄ μλλΌ , μΈλΆμμ μ¬μ©μμ μν΄ μ§μ λλ€.
νμ μμ μ±μ λμΈλ€.
λΆνμν νλ³νμ νμ§ μλλ‘ λμμ€λ€
class Box<T> {
T item;
void setItem(T item) {
this.item = item;
}
T getItem() {
return item;
}
}
μ¬κΈ°μ T λ₯Ό νμ λ³μλΌκ³ νλ€. T λμ E, V, K λ± μν©μ λ§κ² μλ―Έμλ λ¬Έμλ₯Ό μ νν΄μ μ¬μ©ν μ μλ€.
Box : μ λ€λ¦ ν΄λμ€, βTμ Boxβ λλ βT Boxβ λΌκ³ μ½λλ€. μλ―Έλ νμ Tλ₯Ό μμλ‘ νλ Box ν΄λμ€ μ΄λ€.
Box : μμ νμ μ΄λΌκ³ μ½λλ€.
μ λ€λ¦ ν΄λμ€κ° λ Box μΈμ€ν΄μ€λ₯Ό μμ±ν λλ μ€μ νμ μ μ§μ ν΄μ£Όλ©΄ λλ€.
Box<String> b = new Box<String>();
b.setItem("ABC");
String item = b.getItem();
static λ©€λ²λ νμ μ μ’ λ₯μ κ΄κ³μμ΄ λμΌν λ³μμ¬μΌ νλ―λ‘, νμ μ΄ λ¬λΌμ§λ©΄ μλλ€. μ¦, νμ λ³μλ₯Ό μ§μ ν μ μλ€.
T νμ μ λ°°μ΄μ μν μ°Έμ‘°λ³μ μ μΈμ κ°λ₯νλ€.
νμ§λ§, μ λ€λ¦ λ°°μ΄μ μμ±ν μλ μλ€. μμ κ°μ΄ μλ¬κ° λ°μνλ€.
μ΄μ : new μ°μ°μλ μ»΄νμΌ μμ μ νμ μ μ νν μμμΌ νλλ° μ λ€λ¦μ μ¬μ©νκ² λλ©΄ νμ μ μ μ μμΌλκΉ μλ¬κ° λ°μνλ€. instanceof μ°μ°μλ λ§μ°¬κ°μ§λ‘ νμ λ³μ(T)λ₯Ό μ¬μ©ν μ μλ€.
Box<Apple> appleBox = new Box<>(); // κ°λ₯ : νμ
μλ΅
Box<Apple> appleBox = new Box<Apple>(); // κ°λ₯
T implements XXX λ‘ νλ©΄ μΈμν μ μλ€.
λ§μ½, ν΄λμ€λ μμλ°κ³ , μΈν°νμ΄μ€λ ꡬνν΄μΌ νλ€λ©΄ & κΈ°νΈλ‘ μ°κ²°νλ©΄ λλ€.
class Box<T extends Fruit & Eatable> // extends λ₯Ό μ΄μ©νμ¬ νμ
λ³μμ νμ
μ’
λ₯λ₯Ό μ νν μ μλ€.
λ©μλμ μ μΈλΆμ μ λ€λ¦ νμ μ΄ μ μΈλ λ©μλλ₯Ό μ λ€λ¦ λ©μλλΌκ³ νλ€.
class FruitBox<T> {
/*
? λ μμΌλμΉ΄λλΌκ³ μ½λλ€.
μ¬κΈ°μ , T λλ Tμ super ν΄λμ€λ€λ§ Comparator < > μ νμ
μΌλ‘ μ¬ μ μλ€λ μλ―Έμ΄λ€.
*/
static <T> void sort(List<T> list, Comparator<? super T> c)
}
FruitBox μ νμ 맀κ°λ³μ Tμ, μ λ€λ¦ λ©μλ sort() μ μ μΈλ νμ 맀κ°λ³μ Tλ νμ λ¬Έμλ§ κ°μ λΏ, μλ‘ λ€λ₯Έ κ²μ΄λ€.
static λ©μλμλ μ λ€λ¦ νμ μ μ μΈνκ³ μ¬μ©ν μ μλ€.
class FruitBox<T> {
...
}
static class Juice {
...
}
class Fruit {
...
}
class Juicer {
static <T extends Fruit> Juice makeJuice(FruitBox<T> box) {
String tmp = "juice";
return new Juice();
}
}
FruitBox<Apple> appleBox = new FruitBox<Apple>();
νΈμΆ μ,
Juicer.makeJuice(appleBox); // κ°λ₯
Juicer.<Fruit>makeJuice(appleBox); // κ°λ₯ ( T extends Fruit )
Juicer.<Apple>makeJuice(appleBox); // κ°λ₯
(line 24) : κ°μ ν΄λμ€ λ΄μ μλ λ©€λ²λ€λΌλ¦¬λ makeJuice μ²λΌ μμ ν΄λμ€μ΄λ¦(Juicer) λ₯Ό μλ΅ν μ μμ§λ§,
(line 28) : ν΄λμ€ μΈλΆμμλ λ°λμ ν΄λμ€ μ΄λ¦μ μ¨μ€μΌ νλ€.
- Javaμ μ μ 3ν