Generic
PECSProducer Extends & Consumer Super μ μ½μλ‘
λκ°λ₯Ό μμ°νλ μΌμ νλ©΄ μμμ λ°κ³ λκ°λ₯Ό μλΉνλ μΌμ νλ©΄ μμμ ν΄μ£Όλ κ²μ΄λ€.
κ°λ Ή μ λ€λ¦μ 맀κ°λ³μν νμ (Parameterized Types) λ λ¬΄κ³΅λ³ (invariant) ν νΉμ±μ΄ μλ€.
μλ‘ λ€λ₯Έ νμ
Type1
Type2
κ° μλ€κ³ κ°μ ν΄λ΄€μ λ List<Type1>
μ List<Type2>
μ μμ νμ
(Supertype) λ νμ νμ
(Subtype) λ μλλ€.
μμ°μ κ΄μ
public void doSomething(List<? extends MyClass> list) {
for (MyClass e : list) { // Ok
System.out.println(e);
}
}
public void doSomething(List<? extends MyClass> list) {
list.add(new MyClass()); // Compile Error
}
μλΉμ κ΄μ
public void doSomething(List<? super MyClass> list) {
list.add(new MyClass()); // Ok
}
public void doSomething(List<? super MyClass> list) {
for (MyClass e : list) { // Compile Error
System.out.println(e);
}
}
β Bounded Type Parameters Wildcards β