Item 27. Unchecked Warning

비검사 κ²½κ³ λ₯Ό μ œκ±°ν•˜λΌ.

μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜κ²Œλ˜λ©΄ ClassCastException이 λ°œμƒν•  수 μžˆλŠ”λ°, 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ»΄νŒŒμΌλŸ¬κ°€ κ²½κ³ λ₯Ό λ°œμƒμ‹œν‚¨λ‹€. 이 κ²½κ³ λ₯Ό λ¬΄μ‹œν•˜κ²Œλ˜λ©΄ λ‹Ήμ—°ν•˜κ²Œλ„ λ¬Έμ œκ°€ λ°œμƒν•  수 있기 λ•Œλ¬Έμ— μ΅œλŒ€ν•œ κ²½κ³ λ₯Ό μ œκ±°ν•˜λŠ” 것이 μ’‹λ‹€.

@SuppressWarnings

κ²½κ³ λ₯Ό μ΅œλŒ€ν•œ μ œκ±°ν•˜λ”λΌλ„ μ™„λ²½ν•˜κ²Œ μ œκ±°ν•  수 μ—†λŠ” κ²½μš°κ°€ μžˆλ‹€. λ§Œμ•½ νƒ€μž… μ•ˆμ „μ΄ ν™•μ‹ ν•˜λ‹€λ©΄ 이 κ²½κ³ λ₯Ό μˆ¨κ²¨μ€„ 수 μžˆλŠ” @SuppressWarnings μ• λ„ˆν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜λ©΄ λœλ‹€.

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable {

    // ...

    @SuppressWarnings("unchecked")
    public <T> T[] toArray(T[] a) {
        if (a.length < size)
            // Make a new array of a's runtime type, but my contents:
            return (T[]) Arrays.copyOf(elementData, size, a.getClass());
        System.arraycopy(elementData, 0, a, 0, size);
        if (a.length > size)
            a[size] = null;
        return a;
    }

    // ...
}

μœ„ μ½”λ“œλŠ” μ‹€μ œ Java 17의 ArrayList μ½”λ“œλ‘œ, 주석 λΆ€λΆ„μ—μ„œ κ²½κ³ κ°€ λ°œμƒν•˜μ§€λ§Œ @SuppressWarnings μ• λ„ˆν…Œμ΄μ…˜μ„ λ©”μ„œλ“œμ— μ‚¬μš©ν•˜μ—¬ κ²½κ³ λ₯Ό 숨겨주게 λœλ‹€. μ• λ„ˆν…Œμ΄μ…˜ 선언은 κ°œλ³„ μ§€μ—­λ³€μˆ˜ μ„ μ–ΈλΆ€ν„° 클래슀 μ „μ²΄κΉŒμ§€ κ°€λŠ₯ν•˜μ§€λ§Œ, κ°€λŠ₯ν•œ ν•œ 쒁은 λ²”μœ„μ— μ μš©ν•˜λŠ” 것이 μ’‹λ‹€. μœ„ μ½”λ“œμ˜ 더 쒁은 λ²”μœ„μ— μ μš©ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable {

    // ...

    public <T> T[] toArray(T[] a) {
        if (a.length < size) {
            // μ„ μ–ΈλΆ€μ—λ§Œ μ μš©ν•  수 있기 λ•Œλ¬Έμ— μ§€μ—­λ³€μˆ˜ μ„ μ–Έ ν›„ μ• λ„ˆν…Œμ΄μ…˜μ„ μ‚¬μš©
            @SuppressWarnings("unchecked")
            T[] result = (T[]) Arrays.copyOf(elementData, size, a.getClass());
            return result;
        }
        System.arraycopy(elementData, 0, a, 0, size);
        if (a.length > size)
            a[size] = null;
        return a;
    }

    // ...
}

κ²°λ‘ 

비검사 κ²½κ³ λŠ” μ€‘μš”ν•˜λ‹ˆ λ¬΄μ‹œν•˜μ§€ 말고, λ§Œμ•½ κ²½κ³ λ₯Ό μ œκ±°ν•  수 μ—†λ‹€λ©΄ @SuppressWarnings μ• λ„ˆν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜μ—¬ κ²½κ³ λ₯Ό μˆ¨κ²¨μ£ΌλŠ” 방법을 μ‚¬μš©ν•  수 μžˆλ‹€. λ˜ν•œ μ•ˆμ „ν•œ 이유λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ•Œλ €μ£ΌκΈ° μœ„ν•΄ 항상 주석을 톡해 μ•Œλ €μ£ΌλŠ” 것이 μ’‹λ‹€.

Last updated

Was this helpful?