Item27 - λΉκ²μ¬ κ²½κ³ λ₯Ό μ κ±°νλΌ λΉκ²μ¬ κ²½κ³ λ? (unchecked) λΉκ²μ¬λ μλ° μ»΄νμΌλ¬κ° type-safeλ₯Ό 보μ₯νκΈ° μν΄μ νμν νμ
μ λ³΄κ° μΆ©λΆν μ‘΄μ¬νμ§ μλ€λ κ²μ λ»νλ€. κΈ°λ³Έμ μΌλ‘ μλ° μ»΄νμΌλ¬λ λΉκ²μ¬ κ²½κ³ λ₯Ό νμ±ννμ§ μμΌλ©° μ΄λ₯Ό μν΄μλ μ»΄νμΌλ¬μ -Xlint:uncheck μ΅μ
μ μ£Όμ΄μΌνλ€. public class Item27 { public static void main(String[] args) { Set<String> set_1 = new HashSet(); Set<String> set_2 = new HashSet<>(); // μλ° 7λΆν° λ€μ΄μλͺ¬λ μ°μ°μλ‘ ν΄κ²°κ°λ₯ }}
μΈμ€ν΄μ€λ‘ μμ±ν HashSetμ Raw νμ
μΌλ‘ μ¬μ©νκ³ μκΈ° λλ¬Έμ λνλλ λΉκ²μ¬ κ²½κ³ μ΄λ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄μλ μλ°7λΆν° μ§μνλ λ€μ΄μλͺ¬λ μ°μ°μ<>λ₯Ό ν΅ν΄ ν΄κ²°ν μ μλ€. μ λ€λ¦μ μ¬μ©νκ² λλ©΄μ λ§λκ² λλ μ»΄νμΌλ¬ κ²½κ³ λΉκ²μ¬ λ³ν κ²½κ³ μλμ μμλ₯Ό 보면 λ°ννμ
μ΄ Raw νμ
μΌλ‘ λμ΄μλ€. λ°λΌμ νΈμΆνλ κ³³μμλ μλμ κ°μ κ²½κ³ λ₯Ό νμΈν μ μλ€. public class Item27 {
public static void main(String[] args) {
List<String> elements = getElements();
}
private static List getElements() {
return new ArrayList<String>();
}
}
λΉκ²μ¬ νλ³ν κ²½κ³ λΉκ²μ¬ λ³ν κ²½κ³ μμ λ°μν λ¬Έμ λ₯Ό κ°μ λ‘ νλ³νμ ν΅ν΄ ν΄κ²°ν΄λ³΄λ € νλ€λ©΄ μλμ κ°μ κ²½κ³ λ₯Ό νμΈν μ μλ€. μ΄ κ²½μ°μλ μλ° μ»΄νμΌλ¬κ° Listμ μ λ€λ¦ νμ
μ StringμΌλ‘ μ ν μ μλ λ°©λ²μ΄ μκΈ° λλ¬Έμ΄λ€. type erasureλλ¬ΈμΈ κ² κ°λ€. μ λ€λ¦μ νμ
μ λ³΄κ° μκ±°κ° λκΈ° λλ¬Έμ μ μ μμ΄μ λνλλ κ²½κ³ μΈ κ² κ°λ€. public class Item27 {
public static void main(String[] args) {
List<String> elements = (List<String>) getElements();
}
private static List getElements() {
return new ArrayList<String>();
}
}
λΉκ²μ¬ λ©μλ νΈμΆ κ²½κ³ μ΄ κ²½μ°μλ Raw νμ
μΌλ‘ μ μΈμ΄ λμ΄ μκΈ°λλ¬Έμ μ΄λ€ νμ
μ κ°μ΄ λ€μ΄κ°λ μ»΄νμΌ μμ μ μ‘μ μ μκ²λλ€. κ·Έλ¦¬κ³ μλμ κ°μ κ²½κ³ λ₯Ό νμΈν μ μλ€. μ΄λ° νμμ μ§μνλ μ΄μ λ μ λ€λ¦μ΄ λμ€κΈ° μ μ μλ° λ²μ μμλ μ‘΄μ¬νμ§ μλ κ°λ
μ΄μκΈ°μ νΈνμ±μ μν΄ νμ©νκ³ μλ κ² λΏμ΄μ§ μ΄λ° λ°©μμΌλ‘ μ¬μ©ν΄μλ μλλ€. public class Item27 {
public static void main(String[] args) {
List names = new ArrayList();
names.add("κΉνμ±");
names.add(27);
System.out.println(names.contains("κΉνμ±"));
System.out.println(names.contains(27));
}
}
λΉκ²μ¬ λ§€κ°λ³μν κ°λ³μΈμ νμ
κ²½κ³ κ°λ³μΈμλ₯Ό μ λ€λ¦κ³Ό ν¨κ» μ¬μ©νλ©΄ λ¬Έμ κ° λ μ μλ€. κ·Έ μ΄μ λ‘ κ°λ³μΈμλ μ묡μ μΌλ‘ λ°°μ΄μ μμ±νλλ° μ λ€λ¦μ λ°°μ΄μ νμ©νμ§ μκΈ° λλ¬Έμ΄λ€. μ΄λ¬ν λΆμΌμΉλ‘ μΈν΄μ λνλλ κ²½κ³ λ€. heap pollution? μ λ€λ¦ νμ
μμ λ³μνλ νμ
μ΄ μ€μ λ€λ₯Έ κ²μ μλ―Ένλ€. public class Item27 {
public static void main(String[] args) {
List list = toList("1", 2, "3");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
System.out.println(next);
}
}
private static <T> List<T> toList(T... elements) {
return Arrays.asList(elements);
}
}
ν μ μλ ν λͺ¨λ λΉκ²μ¬ κ²½κ³ λ₯Ό μ κ±°νλΌ μμ μμ μΈμλ μ΄λ €μ΄ κ²½κ³ λ λ§μ΄ μ‘΄μ¬νμ§λ§, κ³§λ°λ‘ ν΄κ²°λμ§ μλ κ²½κ³ κ° λνλλ λͺ¨λ λΉκ²μ¬ κ²½κ³ λ₯Ό μ κ±°ν΄μΌ νλ€. λͺ¨λ μ κ±°νλ€λ©΄ κ·Έ μ½λλ νμ
μμ μ±μ΄ 보μ₯λλ€. μ¦ λ°νμ
μ ClassCastExceptionμ΄ λ°μν μΌμ΄ μμΌλ©° μλν λλ‘ μ λμν κ²μ΄λ€. κ²½κ³ λ₯Ό μ κ±°ν μ μμ§λ§ νμ
μμ μ±μ νμ ν μ μλ€λ©΄ @SuppressWarnings(βuncheckedβ) μ λν
μ΄μ
μ λ¬μ κ²½κ³ λ₯Ό μ¨κΈ°λλ‘νμ. @SuppressWarnings μ λν
μ΄μ
μ κ°λ³ μ§μλ²μ μ μΈλΆν° ν΄λμ€ μ 체κΉμ§ μ΄λ€ μ μΈμλ λ¬ μ μμ§λ§ κ°λ₯ν μ’μ λ²μμ μ μ©νλλ‘ νμ. λ³΄ν΅ λ³μμ μΈ, μμ£Ό μ§§μ λ©μλ, μμ±μκ° λ κ²μ΄λ€. μ¬κ°ν κ²½κ³ λ₯Ό λμΉ μ μκΈ° λλ¬Έμ μ λ ν΄λμ€ μ 체μ μ μ©ν΄μλ μλλ€. μ λ
Έν
μ΄μ
μ μ¬μ©ν λ μ΄ κ²½κ³ λ₯Ό 무μν΄λ λλ μ΄μ λ₯Ό μ£ΌμμΌλ‘ λ¨κ²¨μΌ λ€λ₯Έ μ¬λμ΄ κ·Έ μ½λλ₯Ό μ΄ν΄ν μ μμΌλ©° μλͺ» μμ νλ μν©μ λ°©μ§νλ€. SuppressWarnings μ¬μ©λ°©λ² μ½λκ° μμ μ±μ΄ 보μ₯λ λ μ¬μ©ν΄μΌνλ€. @SuppressWarnings("unchecked")
private static <T> List<T> toList(T... elements) {
return Arrays.asList(elements);
}