2016/12/10の30分 Kotlinメモ🌂
書いてるコードは雑にここにあります。
Delegated Properties
あー、あーなるほど。ようわからん。
良さそうなんだけど、使い方に慣れなくて全くようわからん状態のコードを書いてた。
open class User(open val name: String) { var age = 0 var gender: Int = 0 set(value) { field = value } val isAdmin: Boolean get() = false val language by Language() } class Language { val code = 1 operator fun getValue(thisRef: Any?, property: KProperty<*>): Language { return Language() } } val u3 = User("test") println(u3.language.code)
なるほど、すべてりかいした(嘘
DroidKaigiの締め切り日が迫ってるってコードをなんとかDelegated Propertiesとか使っちゃって書こうとしたけど、無理無理
class DroidKaigi(val now: LocalDateTime) { var status: String by Shimekiri(now) } class Shimekiri(val now: LocalDateTime) { val kaisai = LocalDate.of(2016, 3, 9).atTime(0, 0) var status: String = "やばい" operator fun setValue(droidKaigi: DroidKaigi, property: KProperty<*>, s: String) { } operator fun getValue(droidKaigi: DroidKaigi, property: KProperty<*>): String { return status } }
とりあえずlazy
が良さ気なことは理解した。
modeで色々変えられるっぽい。デフォルトはSynchronizedLazyImplだね。
public fun <T> lazy(initializer: () -> T): Lazy<T> = SynchronizedLazyImpl(initializer) public fun <T> lazy(mode: LazyThreadSafetyMode, initializer: () -> T): Lazy<T> = when (mode) { LazyThreadSafetyMode.SYNCHRONIZED -> SynchronizedLazyImpl(initializer) LazyThreadSafetyMode.PUBLICATION -> SafePublicationLazyImpl(initializer) LazyThreadSafetyMode.NONE -> UnsafeLazyImpl(initializer) }
まとめ
今日ついに上着買いました🎉
まだ着ないけど...