getValue
e.g.
val id by longID { 123L }
作用域与应用场景
LongIDDelegate.getValue 委托主要应用于对外的公开属性场景, 通过委托来减少某个对象在初始化时产生过多的简单包装器。
你需要避免一些错误的做法:
避免在一个类的私有作用域使用此委托,例如使用一个私有属性作为委托目标如下:
// Bad
class Foo {
// 私有属性没有代理的必要
private val id by longID { 123L }
}
你可以修改为
// Good
class Foo {
private val idValue = 123L
// 委托对外公开的属性而非内部应用的属性
private val id by longID { idValue }
}
避免在局部作用域使用此委托,例如一个方法中如下:
// Bad
fun foo() {
val id by longID { 123L }
// 下面会产生3个 ID 对象
useID(now)
useID(now)
useID(now)
}
你可以修改为
fun foo() {
// 直接使用 ID 本身的API即可。
val id = 123L.ID
useID(id)
useID(id)
useID(id)
}
Since
3.1.0
See also
e.g.
val id by intID { 123 }
作用域与应用场景
IntIDDelegate.getValue 委托主要应用于对外的公开属性场景, 通过委托来减少某个对象在初始化时产生过多的简单包装器。
你需要避免一些错误的做法:
避免在一个类的私有作用域使用此委托,例如使用一个私有属性作为委托目标如下:
// Bad
class Foo {
// 私有属性没有代理的必要
private val id by intID { 123 }
}
你可以修改为
// Good
class Foo {
private val idValue = 123
// 委托对外公开的属性而非内部应用的属性
private val id by intID { idValue }
}
避免在局部作用域使用此委托,例如一个方法中如下:
// Bad
fun foo() {
val id by intID { 123 }
// 下面会产生3个 ID 对象
useID(now)
useID(now)
useID(now)
}
你可以修改为
fun foo() {
// 直接使用 ID 本身的API即可。
val id = 123.ID
useID(id)
useID(id)
useID(id)
}
Since
3.1.0
See also
e.g.
val id by uIntID { 123u }
作用域与应用场景
UIntIDDelegate.getValue 委托主要应用于对外的公开属性场景, 通过委托来减少某个对象在初始化时产生过多的简单包装器。
你需要避免一些错误的做法:
避免在一个类的私有作用域使用此委托,例如使用一个私有属性作为委托目标如下:
// Bad
class Foo {
// 私有属性没有代理的必要
private val id by uIntID { 123u }
}
你可以修改为
// Good
class Foo {
private val idValue = 123u
// 委托对外公开的属性而非内部应用的属性
private val id by uIntID { idValue }
}
避免在局部作用域使用此委托,例如一个方法中如下:
// Bad
fun foo() {
val id by uIntID { 123u }
// 下面会产生3个 ID 对象
useID(now)
useID(now)
useID(now)
}
你可以修改为
fun foo() {
// 直接使用 ID 本身的API即可。
val id = 123u.ID
useID(id)
useID(id)
useID(id)
}
Since
3.1.0
See also
e.g.
val id by uLongID { 123u }
作用域与应用场景
ULongIDDelegate.getValue 委托主要应用于对外的公开属性场景, 通过委托来减少某个对象在初始化时产生过多的简单包装器。
你需要避免一些错误的做法:
避免在一个类的私有作用域使用此委托,例如使用一个私有属性作为委托目标如下:
// Bad
class Foo {
// 私有属性没有代理的必要
private val id by uLongID { 123u }
}
你可以修改为
// Good
class Foo {
private val idValue: ULong = 123u
// 委托对外公开的属性而非内部应用的属性
private val id by uLongID { idValue }
}
避免在局部作用域使用此委托,例如一个方法中如下:
// Bad
fun foo() {
val id by uLongID { 123u }
// 下面会产生3个 ID 对象
useID(now)
useID(now)
useID(now)
}
你可以修改为
fun foo() {
// 直接使用 ID 本身的API即可。
val idValue: ULong = 123u
val id = idValue.ID
useID(id)
useID(id)
useID(id)
}
Since
3.1.0
See also
将一个 CharSequence (通常为 String) 委托为 CharSequenceID.
e.g.
val id by stringID { "123" }
特别的,你可以在 stringID 或 charSequenceID 的作用域中使用一些快捷能力, 例如通过 random 快速表示委托为一个随机字符串。
val id by stringID { random }
作用域与应用场景
CharSequenceIDDelegate.getValue 委托主要应用于对外的公开属性场景, 通过委托来减少某个对象在初始化时产生过多的简单包装器。
你需要避免一些错误的做法:
避免在一个类的私有作用域使用此委托,例如使用一个私有属性作为委托目标如下:
// Bad
class Foo {
// 私有属性没有代理的必要
private val id by stringID { "123" }
}
你可以修改为
// Good
class Foo {
private val idValue = "123"
// 委托对外公开的属性而非内部应用的属性
private val id by stringID { idValue }
}
避免在局部作用域使用此委托,例如一个方法中如下:
// Bad
fun foo() {
val id by stringID { "123" }
// 下面会产生3个 ID 对象
useID(now)
useID(now)
useID(now)
}
你可以修改为
fun foo() {
// 直接使用 ID 本身的API即可。
val id = "123".ID
useID(id)
useID(id)
useID(id)
}
Since
3.1.0
See also
将一个毫秒时间戳委托为 Timestamp.
e.g.
val now by timestamp { System.currentTimeMillis() }
特别的,如果你希望委托时间为当前时间,即 System.currentTimeMillis, 可以使用 TimestampDelegate.now 快速书写:
val now by timestamp { now }
作用域与应用场景
TimestampDelegate.getValue 委托主要应用于对外的公开属性场景, 通过委托来减少某个对象在初始化时产生过多的简单包装器。
你需要避免一些错误的做法:
避免在一个类的私有作用域使用此委托,例如使用一个私有属性作为委托目标如下:
// Bad
class Foo {
// 私有属性没有代理的必要
private val now by timestamp { now }
}
你可以修改为
// Good
class Foo {
private val nowMillis = System.currentTimeMillis()
// 委托对外公开的属性而非内部应用的属性
private val timestamp by timestamp { nowMillis }
}
避免在局部作用域使用此委托,例如一个方法中如下:
// Bad
fun foo() {
val now by timestamp { now }
// 下面会产生3个 Timestamp 对象
useTimestamp(now)
useTimestamp(now)
useTimestamp(now)
}
你可以修改为
fun foo() {
// 直接使用 Timestamp 本身的API即可。
val now = Timestamp.now()
useTimestamp(now)
useTimestamp(now)
useTimestamp(now)
}
Since
3.1.0