Android
kotlin and SAM
aucd29
2017. 11. 24. 16:32
일단 kotlin 을 짬짬히 해본 결과 SAM 형태의 interface 를 별도로 더 이상 만들 필요 없음을 인지 했다 listener(true)
가령 자바는 아래와 같은 인터페이스로 작업했다면
interface ITest {
void onResult(boolean res);
}
class Test {
private ITest mListener
void setOnTestListener(ITest l) {
mListener = l
}
void test() {
if (mListener != null) { mListener.onResult(true); }
}
}
class main() {
void test() {
Test a = Test();
a.setOnTestListener((res) -> {
});
a.test();
}
}
코틀린은 아래와 같이 하면 끝난다.
class Test {
lateinit var mListener : (Boolean) -> Unit
fun test() {
mListener(true) // or
interface ITest {
void onResult(boolean res);
}
class Test {
private ITest mListener
void setOnTestListener(ITest l) {
mListener = l
}
void test() {
if (mListener != null) { mListener.onResult(true); }
}
}
class main() {
void test() {
Test a = Test();
a.setOnTestListener((res) -> {
});
a.test();
}
}
코틀린은 아래와 같이 하면 끝난다.
class Test {
lateinit var mListener : (Boolean) -> Unit
fun test() {
mListener.invoke(true)
}
}
class main() {
fun test() {
val a = Test()
a.mListener = { res -> }
a.test()
}
}
만약 인자로 리스너를 받아야 된다면 아래처럼 한다.
fun test(listener: (Boolean) -> Unit) {
}
}
class main() {
fun test() {
val a = Test()
a.mListener = { res -> }
a.test()
}
}
만약 인자로 리스너를 받아야 된다면 아래처럼 한다.
fun test(listener: (Boolean) -> Unit) {
// 최신 kotlin 에서는 invoke 가 추가되었다.
listener.invoke(true)
}
마치 예전의 function point 같은 느낌이랄까?
마치 예전의 function point 같은 느낌이랄까?