๋ฉ์๋ ์ฐธ์กฐ(method reference)
๋ฉ์๋ ์ฐธ์กฐ
-ํ๋์ ๋ฉ์๋๋ง ํธ์ถํ๋ ๋๋ค์์ '๋ฉ์๋ ์ฐธ์กฐ'๋ก ๋ ๊ฐ๋จํ ํ ์ ์๋ค.
์ข ๋ฅ | ๋๋ค | ๋ฉ์๋ ์ฐธ์กฐ |
static๋ฉ์๋ ์ฐธ์กฐ | (x)-> ClassName.method(x) | ClassName::method |
์ธ์คํด์ค๋ฉ์๋ ์ฐธ์กฐ | (obj.x)->obj.method(x) | ClassName::method |
-static ๋ฉ์๋ ์ฐธ์กฐ
Integer method(String s) { //Integer.parseInt(String s)๋ง ํธ์ถ
return Integer.parseInt(s);
}
๋๋ค์
Function<String, Integer> f = (String s) -> Integer.parseInt(s);
๋ฉ์๋ ์ฐธ์กฐ
Function<string, integer> f = (String s) -> Integer::parseInt(s);
-์์ฑ์์ ๋ฉ์๋ ์ฐธ์กฐ
1)๋งค๊ฐ๋ณ์ ์๋ ๊ฒฝ์ฐ
๋๋ค์
Supplier<MyClass> s=()->new MyClass();
๋ฉ์๋ ์ฐธ์กฐ
Supplier<MyClass> s=MyClass::new;
2)๋งค๊ฐ๋ณ์ 1๊ฐ์ธ ๊ฒฝ์ฐ
๋๋ค์
Function<Integer, MyClass> s = (i) -> new MyClass(i);
๋ฉ์๋ ์ฐธ์กฐ
Function<Integer, MyClass> s= MyClass::new;
๋ฐฐ์ด๊ณผ ๋ฉ์๋ ์ฐธ์กฐ
๋๋ค์
Function<Integer, int[]> f = x->new int[x];
๋ฉ์๋ ์ฐธ์กฐ
Function<Integer, int[]> f2 = int[]::new; //๋ฐฐ์ดํ์ []::new
public class MethodReference {
public static void main(String[] args) {
Function<String,Integer> f=(String s) -> Integer.parseInt(s);
Function<String,Integer> f2=Integer::parseInt; //ํจ์ํ ์ธํฐํ์ด์ค์ ์ ๋ณด๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฉ์๋์ฐธ์กฐ๊ฐ ๊ฐ๋ฅ
System.out.println(f.apply("100")+200);
System.out.println(f2.apply("100")+200);
Supplier<MyClass> s= ()->new MyClass();
Supplier<MyClass> s2= MyClass::new;
MyClass mc = s.get(); //MyClass ๊ฐ์ฒด ๋ฐํ
System.out.println(s.get());
MyClass mc2 = s2.get(); //MyClass ๊ฐ์ฒด ๋ฐํ
System.out.println(s2.get());
Function<Integer, MyClass2> f3=(i)->new MyClass2(i);
Function<Integer, MyClass2> f4=MyClass2::new;
MyClass2 mc3 = f3.apply(100);
System.out.println(mc3.iv);
System.out.println(f3.apply(200).iv);
MyClass2 mc4 = f4.apply(200);
System.out.println(mc4.iv);
Function<Integer, int[]> f5 = (i) -> new int[i];
System.out.println(f5.apply(100).length);
Function<Integer,int[]> f6 = int[]::new; //๋ฉ์๋ ์ฐธ์กฐ
System.out.println(f6.apply(200).length);
}
}
class MyClass{}
class MyClass2{
int iv;
MyClass2(int iv) {
this.iv=iv;
}
}
output:
300
300
java_study.MyClass@2a3046da
java_study.MyClass@2a098129
100
200
200
100
200