Generic Methods

μ œλ„€λ¦­ λ©”μ„œλ“œλŠ” μœ ν˜• λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ„±ν•œλ‹€.
μ΄λŠ” λ°˜ν™˜ μœ ν˜• μ•žμ— μœ ν˜• λ§€κ°œλ³€μˆ˜λ‘œ μ„ μ–Έν•΄μ€€λ‹€.

μ ‘κ·Όμ œμ–΄μž <νƒ€μž… νŒŒλΌλ©”ν„°> λ¦¬ν„΄νƒ€μž… λ©”μ†Œλ“œλͺ… (λ§€κ°œλ³€μˆ˜, ...) {
  /* statement */
}

정적 및 λΉ„ 정적인 μ œλ„€λ¦­ 방법은 λ¬Όλ‘  μ œλ„€λ¦­ν•œ 클래슀 μƒμ„±μžλ„ ν—ˆμš©ν•œλ‹€.

public class Util {
    public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
        return p1.getKey().equals(p2.getKey()) &&
               p1.getValue().equals(p2.getValue());
    }
}

public class Pair<K, V> {

    private K key;
    private V value;

    public Pair(K key, V value) {
        this.key = key;
        this.value = value;
    }

    public void setKey(K key) { this.key = key; }
    public void setValue(V value) { this.value = value; }
    public K getKey()   { return key; }
    public V getValue() { return value; }
}

μ œλ„€λ¦­ λ©”μ„œλ“œμ˜ 경우 μ•„λž˜μ™€ 같은 ꡬ문 ν˜•νƒœλ‘œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.




Β 

Pair<Integer, String> p1 = new Pair<>(1, "apple");
Pair<Integer, String> p2 = new Pair<>(2, "pear");

boolean same1 = Util.<Integer, String>compare(p1, p2);

μ•„λž˜μ™€ 같이 νƒ€μž… 좔둠을 μ΄μš©ν•˜μ—¬ <> 없이 μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

boolean same1 = Util.compare(p1, p2);

Type Inference (νƒ€μž… μΆ”λ‘ )

각 λ©”μ„œλ“œμ˜ 호좜과 ν•΄λ‹Ή 선언을 κ²€ν† ν•˜μ—¬ 호좜이 κ°€λŠ₯ν•˜λ„λ‘ ν•˜λŠ” Java 컴파일러의 κΈ°λŠ₯이닀.
μ»΄νŒŒμΌνƒ€μž„μ— κ²°μ • λœλ‹€.