아래의 글은 드미트리 제메로프, 스베트라나 이사코바 저/오현석역,『Kotlin in Action』,에이콘출판사(2017)의 내용을 기반으로 작성하였습니다.
코틀린에서 어노케이션 인자 지정 문법
- @Annotation(TheClass::class)
- 어노테이션 인자로 어노테이션 넣는 경우는 @ 생략
- 배열 = arrayOf함수 사용
- 프로퍼티를 어노테이션 인자로 사용할 경우 const 붙여서 사용
어노테이션 대상
방법 : @get:Rule : 사용대상:어노테이션 이름
대상 : property, field, get, set, receiver, param, setparam, delegate, file
어노테이션 인자로 식 허용
어노테이션 선언 : annotation class JsonExclude
annotation class JsonName(val name: String)
// java
public @interface JsonName {
String value();
}
어노테이션 제어 : 메타어노테이션
어노테이션 클래스에 적용할 어노테이션
@Retention(AnnotationRetention.RUNTIME) : default 값
inteface Company {
val name: String
}
data class CompanyImpl(override val name: String): Company
data class Person(
val name: String,
@DeserializedIntefface(CompanyImpl::class) val company: Company
)
annotaion class DeserializedInterface(val targetClass: KClass<out Any>)
annotation class CustomerSerializer {
val serializerClass: KClass<out ValueSerializer<*>>
}
어노테이션 파라메터로 제네릭 클래스 받기
example from : github.com/yole/jkid/blob/master/src/test/kotlin/examples/_6DateSerializerExample.kt
package ru.yole.jkid.examples.customSerializerTest
import org.junit.Test
import ru.yole.jkid.CustomSerializer
import ru.yole.jkid.ValueSerializer
import ru.yole.jkid.examples.jsonSerializerTest.testJsonSerializer
import java.text.SimpleDateFormat
import java.util.*
object DateSerializer : ValueSerializer<Date> {
private val dateFormat = SimpleDateFormat("dd-mm-yyyy")
override fun toJsonValue(value: Date): Any? =
dateFormat.format(value)
override fun fromJsonValue(jsonValue: Any?): Date =
dateFormat.parse(jsonValue as String)
}
data class Person(
val name: String,
@CustomSerializer(DateSerializer::class) val birthDate: Date
)
class DateSerializerTest {
@Test fun test() = testJsonSerializer(
value = Person("Alice", SimpleDateFormat("dd-mm-yyyy").parse("13-02-1987")),
json = """{"birthDate": "13-02-1987", "name": "Alice"}"""
)
}
책 사이트
www.manning.com/books/kotlin-in-action
kotlin-in-action 전체 예제 코드
www.manning.com/downloads/1271
json 변환 kotlin 기반 라이브러리
'독서관련 > Kotlin in Action' 카테고리의 다른 글
CH11 Domain Specific Language (0) | 2021.03.02 |
---|---|
CH10 리플렉션 (0) | 2021.02.13 |
CH09 코틀린 제네릭스 (0) | 2021.01.29 |
CH08 코틀린 고차함수 (0) | 2021.01.28 |
CH07 코틀린 연산자 오버로딩 (0) | 2021.01.27 |