item 30 JungHyunLyoo - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
ν΄λμ€μ λ§μ°¬κ°μ§λ‘, λ©μλλ μ λ€λ¦μΌλ‘ λ§λ€ μ μλ€.
νμ 맀κ°λ³μμ λͺ λͺ κ·μΉμ μ λ€λ¦ λ©μλλ μ λ€λ¦ νμ μ΄λ λκ°λ€.(item 29)
raw typeμ μ¬μ©νμ§ μλλ‘ μ£Όμνλ€(Set,List)
public static <E> Set<E> union(Set<E> s1, Set<E> s2) {
Set<E> result = new HashSet<>(s1);
result.addAll(s2);
return result;
}
μ λ©μλλ μ§ν© 3κ°(μ λ ₯ 2κ°, λ°ν1κ°)μ νμ μ΄ λͺ¨λ κ°μμΌ νλ€.
μ΄λ₯Ό νμ μ μμΌλμΉ΄λ νμ
(item 31)
μ μ¬μ©νμ¬ λ μ μ°νκ² κ°μ ν μ μλ€.
λλλ‘ λΆλ³ κ°μ²΄(Immutable Object)λ₯Ό μ¬λ¬ νμ μΌλ‘ νμ©ν μ μκ² λ§λ€μ΄μΌ ν λκ° μλ€.
μ΄λ κ² νλ €λ©΄, μμ²ν νμ 맀κ°λ³μμ λ§κ² λ§€λ² κ·Έ κ°μ²΄μ νμ μ λ°κΏμ£Όλ μ μ ν©ν°λ¦¬λ₯Ό λ§λ€μ΄μΌ νλ€.
μ΄ ν¨ν΄μ μ λ€λ¦ μ±κΈν΄ ν©ν°λ¦¬
λΌ νλ€.
μ λ€λ¦ μ±κΈν΄ ν©ν°λ¦¬ ν¨ν΄μ μμ λ₯Ό μ΄ν΄λ³΄μ
import java.util.function.UnaryOperator;
public class GenericSingletonFactory {
private static UnaryOperator<Object> IDENTITY_FN = (t) -> t;
@SuppressWarnings("unchecked")
public static <T> UnaryOperator<T> identityFunction() {
return (UnaryOperator<T>) IDENTITY_FN;
}
public static void main(String[] args) {
String[] strings = { "μΌλ² ", "λλ§", "λμΌλ‘ " };
UnaryOperator<String> sameString = identityFunction();
for (String s : strings)
System.out.println(sameString.apply(s));
Number[] numbers = { 1, 2.0, 3L };
UnaryOperator<Number> sameNumber = identityFunction();
for (Number n : numbers)
System.out.println(sameNumber.apply(n));
}
}
μκΈ° μμ μ΄ λ€μ΄κ° ννμμ μ¬μ©νμ¬ νμ 맀κ°λ³μμ νμ© λ²μλ₯Ό νμ νλ κ².
νμ μ μμ°μ μμλ₯Ό μ νλ Comparable μΈν°νμ΄μ€(item 14)μ ν¨κ» μ°μ΄λ κ°λ μ΄λ€.
Comparableμ ꡬνν μμμ 컬λ μ μ μ λ ₯λ°λ λ©μλλ€μ μ£Όλ‘ κ·Έ μμλ€μ μ λ ¬ νΉμ κ²μνκ±°λ,
μ΅μκ°μ΄λ μ΅λκ°μ ꡬνλ μμΌλ‘ μ¬μ©λλ€.
import java.util.*;
// μ¬κ·μ νμ
νμ μ μ΄μ©ν΄ μνΈ λΉκ΅ν μ μμμ νν (179μͺ½)
public class RecursiveTypeBound {
// μ½λ 30-7 컬λ μ
μμ μ΅λκ°μ λ°ννλ€. - μ¬κ·μ νμ
νμ μ¬μ© (179μͺ½)
public static <E extends Comparable<E>> E max(Collection<E> c) {
if (c.isEmpty())
throw new IllegalArgumentException("컬λ μ
μ΄ λΉμ΄ μμ΅λλ€.");
E result = null;
for (E e : c)
if (result == null || e.compareTo(result) > 0)
result = Objects.requireNonNull(e);
return result;
}
public static void main(String[] args) {
List<String> argList = Arrays.asList(args);
System.out.println(max(argList));
}
}
νμ νμ μΈ <E extends Comparable>λ "λͺ¨λ νμ Eλ μμ κ³Ό λΉκ΅ν μ μλ€"λΌκ³ μ½μ μ μλ€.