item 29 JungHyunLyoo - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
- ν΄λμ€ μ μΈμ <μ κ· νμ λ§€κ°λ³μ>λ₯Ό μΆκ°νκΈ°(λ³΄ν΅ E μ¬μ©)
- ν΄λμ€ λ΄μ μ λ€λ¦μΌλ‘ μ§μ νκ³ μΆμ νλ νμ μ ν΄λμ€ μ μΈμ μΆκ°ν΄λμ <μ κ· νμ λ§€κ°λ³μ>λ‘ λ°κΎΈκΈ°
public class Stack<E> {
private E[] elements;
private int size = 0;
private static final int DEFAULT_INITIAL_CAPACITY = 16;
public Stack() {
elements = new E[DEFAULT_INITIAL_CAPACITY];
}
public void push(E e) {
ensureCapacity();
elements[size++] = e;
}
public E pop() {
if (size == 0)
throw new EmptyStackException();
E result = elements[--size];
elements[size] = null; // λ€ μ΄ μ°Έμ‘° ν΄μ
return result;
}
public boolean isEmpty() {
return size == 0;
}
private void ensureCapacity() {
if (elements.length == size)
elements = Arrays.copyOf(elements, 2 * size + 1);
}
public static void main(String[] args) {
Stack<String> stack = new Stack<>();
for (String arg : args)
stack.push(arg);
while (!stack.isEmpty())
System.out.println(stack.pop().toUpperCase());
}
}
νμ§λ§ μ μ½λλ μ»΄νμΌλμ§ μλλ€!! Eμ κ°μ μ€μ²΄ν λΆκ° νμ μΌλ‘λ λ°°μ΄μ λ§λ€ μ μκΈ° λλ¬Έμ΄λ€.
1. μμ±μ λ΄μμ elements νλμ μΈμ€ν΄μ€ μμ±μ μλμ κ°μ΄ μμ
elements = new E[DEFAULT_INITIAL_CAPACITY];
-> elements = (E[]) new Object[DEFAULT_INITIAL_CAPACITY];
2. μμ±μμ @SuppressWarnings("unchecked") μ΄λ
Έν
μ΄μ
μ μΆκ°
μ₯μ : κ°λ
μ± β
λ¨μ : λ°°μ΄μ λ°νμ νμ
μ΄ μ»΄νμΌνμ νμ
κ³Ό λ¬λΌ ν μ€μΌ(item 32) β
1. elementsνλμ νμ
μ E[] -> Object[]λ‘ κ΅μ²΄
κ·Έλ¦¬κ³ μμ Eκ° μ€μ²΄ν λΆκ° νμ
μ΄κΈ° λλ¬Έμ, elements νμ
λ΄ μμλ₯Ό μ»μ΄μ€λ λΆλΆ μμ
E result = elements[--size];
-> E result = (E) elements[--size];
2. @SuppressWarnings("unchecked") μ΄λ
Έν
μ΄μ
μ μμ ν μ½λ λ°λ‘ μμ μΆκ°
μ₯μ : ν μ€μΌ β
λ¨μ : κ°λ
μ± β