Share
Embed
Transcript
24 slides
-
Property class User { private long id = 1; public
long getId() { return this.name; } public void setId(long id) { this.id = id; } } class User { var id: Long = 1 } • JavaͰ͍͏FieldΈ͍ͨͳͷ • ཪͰField(Backing Field), Getter, SetterΛ࣋ͭ -
Delegated Properties class User { var id: Long get() {
return 100 } set(id) { println(id) } } -
Delegated Properties class User { var id: Long get() {
return 100 } set(id) { println(id) } } class User { var id by IdProp() } class IdPref: ReadWriteProperty<Any, Long> { override fun getValue(thisRef: Any, property: KProperty<*>): Long { return 100 } override fun setValue(thisRef: Any, property: KProperty<*>, value: Long) { println(value) } } -
AndroidͰͲ͏׆͔͔͢ • Activity Extra • Fragment Argument • Saved/RestoreInstanceState1 •
SharedPreferences2 1. https://github.com/yamamotoj/Pikkel 2. https://github.com/chibatching/Kotpref -
AndroidͰͲ͏׆͔͔͢ • Activity Extra • Fragment Argument • Saved/RestoreInstanceState1 •
SharedPreferences2 1. https://github.com/yamamotoj/Pikkel 2. https://github.com/chibatching/Kotpref -
Delegated Porperties × Activity Extra UserActivity.kt (Delegated Properties༻લ) class UserActivity:
Activity() { private lateinit var userId: Long override protected fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) userId = intent.getLongExtra(EXTRA_USER_ID, -1) // ... } companion object { private const val EXTRA_USER_ID = "userId" fun createIntent(context: Context, userId: Long): Intent { return Intent(context, UserActivity::class.java) .putExtra(EXTRA_USER_ID, userId) } } } -
Delegated Porperties × Activity Extra UserActivity.kt (Delegated Properties༻લ) class UserActivity:
Activity() { private lateinit var userId: Long // or 「var userId: Long?」 override protected fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) userId = intent.getLongExtra(EXTRA_USER_ID, -1) // ... } companion object { private const val EXTRA_USER_ID = "userId" fun createIntent(context: Context, userId: Long): Intent { return Intent(context, UserActivity::class.java) .putExtra(EXTRA_USER_ID, userId) } } } -
Delegated Porperties × Activity Extra Extra.kt private object UNINITIALIZED_VALUE class
Extra<T>: ReadWriteProperty<Activity, T> { var field: Any? = UNINITIALIZED_VALUE override fun getValue(thisRef: Activity, property: KProperty<*>): T { if (field == UNINITIALIZED_VALUE) { field = thisRef.intent.extras?.get(property.name) } return field as T } override fun setValue(thisRef: Activity, property: KProperty<*>, value: T) { field = value } } -
Delegated Porperties × Activity Extra Extra.kt private object UNINITIALIZED_VALUE class
Extra<T>: ReadWriteProperty<Activity, T> { var field: Any? = UNINITIALIZED_VALUE override fun getValue(thisRef: Activity, property: KProperty<*>): T { if (field == UNINITIALIZED_VALUE) { field = thisRef.intent.extras?.get(property.name) } return field as T } override fun setValue(thisRef: Activity, property: KProperty<*>, value: T) { field = value } } -
Delegated Porperties × Activity Extra UserActivity.kt (Delegated Properties༻લ) class UserActivity:
Activity() { private lateinit var userId: Long override protected fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) userId = intent.getLongExtra(EXTRA_USER_ID, -1) // ... } companion object { private const val EXTRA_USER_ID = "userId" fun createIntent(context: Context, userId: Long): Intent { return Intent(context, UserActivity::class.java) .putExtra(EXTRA_USER_ID, userId) } } } -
Delegated Porperties × Activity Extra UserActivity.kt (Delegated Properties༻ޙ) class UserActivity:
Activity() { private lateinit var userId: Long override protected fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) userId = intent.getLongExtra(EXTRA_USER_ID, -1) // ... } companion object { private const val EXTRA_USER_ID = "userId" fun createIntent(context: Context, userId: Long): Intent { return Intent(context, UserActivity::class.java) .putExtra(EXTRA_USER_ID, userId) } } } -
Delegated Porperties × Activity Extra UserActivity.kt (Delegated Properties༻ޙ) class UserActivity:
Activity() { private lateinit var userId: Long by Extra() private val userId: Long by Extra() override protected fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) userId = intent.getLongExtra(EXTRA_USER_ID, -1) // ... } companion object { private const val EXTRA_USER_ID = "userId" fun createIntent(context: Context, userId: Long): Intent { return Intent(context, UserActivity::class.java) .putExtra(EXTRA_USER_ID, userId) } } } -
Delegated Porperties × Activity Extra UserActivity.kt (Delegated Properties༻ޙ) class UserActivity:
Activity() { private val userId: Long by Extra() override protected fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... } companion object { private const val EXTRA_USER_ID = "userId" fun createIntent(context: Context, userId: Long): Intent { return Intent(context, UserActivity::class.java) .putExtra(EXTRA_USER_ID, userId) } } } -
Delegated Porperties × Activity Extra UserActivity.kt (Delegated Properties༻ޙ) class UserActivity:
Activity() { private val userId: Long by Extra() override protected fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... } companion object { private const val EXTRA_USER_ID = "userId" fun createIntent(context: Context, userId: Long): Intent { return Intent(context, UserActivity::class.java) .putExtra(EXTRA_USER_ID, userId) } } } -
Delegated Porperties × Activity Extra UserActivity.kt (Delegated Properties༻ޙ) class UserActivity:
Activity() { private val userId: Long by Extra() override protected fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... } companion object { private const val EXTRA_USER_ID = "userId" fun createIntent(context: Context, userId: Long): Intent { return Intent(context, UserActivity::class.java) .putExtra(EXTRA_USER_ID, userId) .putExtra(UserActivity::userId.name, userId) } } } -
Delegated Porperties × Activity Extra UserActivity.kt (Delegated Properties༻ޙ) class UserActivity:
Activity() { private val userId: Long by Extra() override protected fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... } companion object { fun createIntent(context: Context, userId: Long): Intent { return Intent(context, UserActivity::class.java) .putExtra(UserActivity::userId.name, userId) } } } -
·ͱΊ Property • = (Backing)Field + Getter + Setter Delegated
Properties • Getter, SetterͷॲཧΛ؆୯ʹҕৡՄೳ • PropertyͷϝλใʹΞΫηεͰ͖ΔͷͰɺ༷ʑͳԠ༻͕Մೳ • Androidಛ༗ͷ͍ॴͨ͘͞Μ