μ΄ λ¬Έμ μμλ integerμ stringμ΄ μμ λ λ νμ
λͺ¨λλ₯Ό νλ¦°νΈ ν μ μλ
νλμ λ©μλμΈ printArrayλ₯Ό μμ±νλ λ¬Έμ λ€.
(μ€λ²λ‘λ©μ μ¬μ©ν΄μλ μλλ€.)
μ λ€λ¦ λ©μλλ λ¨μΌ λ©μλλ‘ μ¬λ¬ λ°μ΄ν°νμ
λ€μ λ€λ£° μ μμ΄ λ§€μ° μ μ©νλ€.
λ°μ΄ν° νμ
μ μΌλ°ν(generalize)νλ€λ μλ―Έλ₯Ό μ§λλλ°, ν΄λμ€λ λ©μλμμ μ¬μ©ν λ΄λΆ λ°μ΄ν° νμ
μ μ»΄νμΌμμ 미리 μ§μ νκ² λλ€.
μ΄λ₯Ό ν΅ν΄,
1. ν΄λμ€λ λ©μλ λ΄λΆμμ μ¬μ©λλ κ°μ²΄μ νμ
μμ μ±μ λμΌ μ μλ€.
μλͺ»λ νμ
μ΄ μ¬μ©λ μ μλ λ¬Έμ λ₯Ό μ»΄νμΌ κ³Όμ μμ μ κ±°ν μ μκΈ° λλ¬Έμ΄λ€.
2. λ°νκ°μ λν νμ
λ³ν λ° νμ
κ²μ¬μ λ€μ΄κ°λ λ
Έλ ₯μ μ€μΌ μ μλ€.
μ¦, νμ
μ κ΅νν΄ μ£ΌκΈ° λλ¬Έμ μμλ₯Ό μ°Ύμμ¬ λ νμ
λ³νμ ν νμκ° μμ΄ νλ‘κ·Έλ¨ μ±λ₯ ν¨κ³Όλ κΈ°λν μ μλ€.
μ λ€λ¦ μ¬μ©λ²
public class ν΄λμ€λͺ
<T> {...}
public interface μΈν°νμ΄μ€λͺ
<T> {...}
ν΄λμ€ λλ μΈν°νμ΄μ€ λͺ λ€μ <>λΆνΈκ° λΆκ³ , μ¬μ΄μ νμ νλΌλ―Έν°κ° λ€μ΄κ°λ€.
class Sample<T> {
private T anonyTypeData;
}
public <T> T test2(Supplier<T> supplier){
System.out.println("supplier μΈν°νμ΄μ€μ λ°ννμ
μ λ°λΌμ test2μ λ°ννμ
μ΄ κ²°μ λλ€.");
return supplier.get();
}
public <P, R> R test(P p, Function<P, R> function){
return function.apply(p);
}
class AnonyMap<K, V> implements Map<K, V>{
....
}
commaλ₯Ό κΈ°μ€μΌλ‘ μ¬λ¬κ°μ§ νμ μ μ μΈν΄ μ¬μ©ν μ μλ€.
4.μμΌλ μΉ΄λλ₯Ό μ¬μ©ν΄ μ μ°ν μ²λ¦¬κ° κ°λ₯νλ€.
@Test
public void test(){
List<String> example = new ArrayList<>();
method1(example); // μ λ€λ¦ νμ
μ΄ μΌμΉνμ§ μκΈ° λλ¬Έμ μ»΄νμΌ μλ¬ λ°μ
method2(example); // λͺ¨λ μ λ€λ¦ νμ
μ νμ©νκΈ° λλ¬Έμ μ»΄νμΌ μλ¬ μμ
}
public void method1(List<Object> param){ // Listμ μ λ€λ¦νμ
μΌλ‘ Objectλ§ νμ©νλ€.
// ...
}
public void method2(List<?> param){ // Listμ μ λ€λ¦νμ
μΌλ‘ λͺ¨λ νμ
μ νμ©νλ€.
// ...
}
μμΌλ μΉ΄λλ 3κ°μ§ νμ
μ΄ μλ€.
μ λ€λ¦νμ
<?> : νμ
νλΌλ―Έν°λ₯Ό λμΉνλ κ²μΌλ‘ λͺ¨λ ν΄λμ€λ μΈν°νμ΄μ€νμ
μ΄ μ¬ μ μμ΅λλ€.
μ λ€λ¦νμ <? extends μμνμ > : μμΌλμΉ΄λμ λ²μλ₯Ό νΉμ κ°μ²΄μ νμ ν΄λμ€λ§ μ¬ μ μμ΅λλ€.
μ λ€λ¦νμ <? super νμνμ > : μμΌλμΉ΄λμ λ²μλ₯Ό νΉμ κ°μ²΄μ μμ ν΄λμ€λ§ μ¬ μ μμ΅λλ€.
쑰건
1.JDK 1.5 μ΄μ
2.μ¬μ©ν λ³μλ μ§μλ³μλ‘ μΈμλλ€. (Forλ¬Έ μμμ μ¬μ©λκΈ° λλ¬Έ)
3.λμμ λ°°μ΄ or μ¬λ¬ μμλ₯Ό ν¬ν¨ν μλ£νμ΄μ΄μΌ νλ€.
λ¬Έλ²
for(μλ£ν λ³μλͺ
: λ°°μ΄λͺ
){
λ¬Έμ₯
}
String[] arr = {"1-1","1-2","1-3","1-4","1-5"};
for(String s : arr) {
System.out.println(s);
}
//κ²°κ³Ό
1-1
1-2
1-3
1-4
1-5
μ»΄νμΌλ μλ° μ½λμμ μμΌλ‘ ν΄λμ€λ₯Ό λΆλ¬μ methodλ° λ³μ(field)λ₯Ό λΆλ¬μ€λ λ°©λ²μΌλ‘, ν΄λμ€λ₯Ό λμ λ‘λ©νμ¬ μ¬μ©ν λ λ§μ΄ μ¬μ©λκ³ λμ»΄νμΌμμλ μμ£Ό μ¬μ©λλ€.
ꡬ체μ μΈ ν΄λμ€ νμ μ μμ§ λͺ»νμ§λ§ ν΄λΉ ν΄λμ€μ μ κ·Όνλ € ν λ μ¬μ©νλ APIλ€. λ³μμ κ°μ 쑰건μ λ°λΌμ λ€λ₯΄κ² μ¬μ©ν΄μΌ νλ κ²½μ° νΉμ μ ν리μΌμ΄μ μ΄ μ€νλκ³ λμ μμ±λλ ν΄λμ€μ κ²½μ°μ μ¬μ©ν΄λ³Ό μ μλ€.
import java.io.IOException;
import java.lang.reflect.Method;
import java.security.PublicKey;
class Printer {
//Write your code here
public <T> void printArray(T[] array){ //μ λ€λ¦ νμ
μ΄ λ©μλ νΈμΆ μμ μ κ²°μ λμ΄μΌ ν κ²½μ° μ¬μ©λλ©°, νλΌλ―Έν° νμ
μ λ°λΌ μ λ€λ¦ νμ
μ΄ κ²°μ λκΈ° λλ¬Έμ λμ μΈ μ²λ¦¬ κ°λ₯
for (T element: array){ //ν₯μλ forλ¬Έ. for(μλ£ν λμ
λ°μ λ³μλͺ
: λ°°μ΄λͺ
) λ°°μ΄ νλͺ©μ μ²μλΆν° νλμ© elementμ λμ
ν΄ μ€ννλ€. κ·Έ λ°°μ΄μ κΈΈμ΄λ§νΌ forλ¬Έμ΄ λλ€.
System.out.println(element);
}
}
}
public class JavaGenerics {
public static void main( String args[] ) {
Printer myPrinter = new Printer();
Integer[] intArray = { 1, 2, 3 };
String[] stringArray = {"Hello", "World"};
myPrinter.printArray(intArray); //intArray: Integer[3]
myPrinter.printArray(stringArray); //stringArray: ["Hello", "World"]
int count = 0;
for (Method method : Printer.class.getDeclaredMethods()) { //getDeclaredMethods()λ ν΄λμ€μ μ μλ λͺ¨λ λ©μλ(μ κ·Όμ, 리ν΄νμ
, νλΌλ―Έν°) μ 보λ₯Ό κ°μ Έμ¨λ€.
String name = method.getName(); // name: printArray
if(name.equals("printArray"))
count++; //μ‘°κ±΄μ΄ μΆ©μ‘±νλ―λ‘ count +1
}
if(count > 1)System.out.println("Method overloading is not allowed!");
}
}