일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 오픈소스
- 공부집중
- 명언모음
- 파이썬
- DART
- Firebase
- Coroutine
- 이모지메모
- 넷플릭스
- 소울칼리버6
- Flutter
- 코틀린
- bash
- 벤자민플랭클린
- jetpack compose
- Freesound
- 좋은글필사하기
- recyclerview
- kotlin
- androidx
- 이모지
- Streaming
- FSM
- Linux
- 장자명언
- 명심보감
- ASMR
- 공자명언
- Android
- 1인개발자
Archives
- Today
- Total
Vintage appMaker의 Tech Blog
[kotlin] reified 사용하는 이유 본문
Source code or Tip/Android(Java, Kotlin)
[kotlin] reified 사용하는 이유
VintageappMaker 2022. 8. 15. 19:00reified 를 사용하는 이유는 크게 2가지가 있다.
함수의 리턴값과 변수 파라메터를 제너릭으로 사용하면서
1. 다양한 형의 리턴값을 넘겨주고자 할 때
2. 함수에 넘겨진 제너릭변수의 형을 비교해야 할 때
이다.
import java.time.LocalDate
// 0. 사용법
// inline fun<reified T> 함수명: T
// 1.
// 대입받는 변수의 데이터 형에 따라
// 결과값을 선택가능하다.
inline fun<reified T> getToDay(): T? {
val nowDay: LocalDate = LocalDate.now()
return when (T::class) {
String::class -> "now is : $nowDay" as T
Int::class -> nowDay.dayOfMonth as T
else -> null as T
}
}
// 2. 제너릭을 사용한 변수를 넘길 경우,
// 변수형::class와 같이 비교할 수 없다.
// 이 때 reified 사용함
inline fun <reified T> doAction(value : T, calc : (T) -> T) : T?{
//when (T::class) { <== 컴파일시 에러임.
var ptype = T::class
when (ptype){
Int::class -> {
return calc(value)
}
}
return null
}
fun main() {
var rst : Int? = getToDay()
var rst2 : String? = getToDay()
var rst3 : Long? = getToDay()
println("rst = ${rst}, rst2 = ${rst2}, rst3= ${rst3} ")
val rst4 = doAction(11, { n ->
n * 3
})
val rst5 = doAction(11.0, { n ->
n * 3
})
println("rst4 = ${rst4}, rst5 = ${rst5}")
}
결과
rst = 15, rst2 = now is : 2022-08-15, rst3= null
rst4 = 33, rst5 = null
'Source code or Tip > Android(Java, Kotlin)' 카테고리의 다른 글
[jetpack compose] 1. Box (0) | 2022.12.07 |
---|---|
[jetpack compose] 빠르게 시작하기 - Quick start Compose (0) | 2022.11.03 |
[kotlin] Ktor 서버 프로그래밍 - 빠르게 시작하기 (0) | 2022.07.14 |
[Android] 새로운 프로젝트로 jetpack compose를 고민한다면 한 번쯤 고민하는 내용. (0) | 2022.05.08 |
kotlin에서 DI 빠르게 이해하기 (0) | 2022.04.16 |
Comments