일단 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 같은 느낌이랄까?
'Android' 카테고리의 다른 글
value failed for JSON property bounds due to missing (therefore NULL) value for creator parameter bounds which is a non-nullable type (0) | 2017.11.27 |
---|---|
gradle 로 다운로드 받은 라이브러리 경로 (download path) (0) | 2017.11.27 |
android build tool 3.x issue (0) | 2017.11.03 |
gradle 에 ext 변수 이용하기 (0) | 2017.10.27 |
IBM Watson open api (0) | 2017.10.27 |