getValue

inline operator fun LongIDDelegate.getValue(o: Any?, property: KProperty<*>?): LongID(source)

将一个 Long 委托为 LongID.

e.g.

val id by longID { 123L }

作用域与应用场景

LongIDDelegate.getValue 委托主要应用于对外的公开属性场景, 通过委托来减少某个对象在初始化时产生过多的简单包装器。

你需要避免一些错误的做法:

  1. 避免在一个类的私有作用域使用此委托,例如使用一个私有属性作为委托目标如下:

// Bad
class Foo {
// 私有属性没有代理的必要
private val id by longID { 123L }
}

你可以修改为

// Good
class Foo {
private val idValue = 123L
// 委托对外公开的属性而非内部应用的属性
private val id by longID { idValue }
}
  1. 避免在局部作用域使用此委托,例如一个方法中如下:

// 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


inline operator fun IntIDDelegate.getValue(o: Any?, property: KProperty<*>?): IntID(source)

将一个 Int 委托为 IntID.

e.g.

val id by intID { 123 }

作用域与应用场景

IntIDDelegate.getValue 委托主要应用于对外的公开属性场景, 通过委托来减少某个对象在初始化时产生过多的简单包装器。

你需要避免一些错误的做法:

  1. 避免在一个类的私有作用域使用此委托,例如使用一个私有属性作为委托目标如下:

// Bad
class Foo {
// 私有属性没有代理的必要
private val id by intID { 123 }
}

你可以修改为

// Good
class Foo {
private val idValue = 123
// 委托对外公开的属性而非内部应用的属性
private val id by intID { idValue }
}
  1. 避免在局部作用域使用此委托,例如一个方法中如下:

// 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


inline operator fun UIntIDDelegate.getValue(o: Any?, property: KProperty<*>?): UIntID(source)

将一个 UInt 委托为 UIntID.

e.g.

val id by uIntID { 123u }

作用域与应用场景

UIntIDDelegate.getValue 委托主要应用于对外的公开属性场景, 通过委托来减少某个对象在初始化时产生过多的简单包装器。

你需要避免一些错误的做法:

  1. 避免在一个类的私有作用域使用此委托,例如使用一个私有属性作为委托目标如下:

// Bad
class Foo {
// 私有属性没有代理的必要
private val id by uIntID { 123u }
}

你可以修改为

// Good
class Foo {
private val idValue = 123u
// 委托对外公开的属性而非内部应用的属性
private val id by uIntID { idValue }
}
  1. 避免在局部作用域使用此委托,例如一个方法中如下:

// 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


inline operator fun ULongIDDelegate.getValue(o: Any?, property: KProperty<*>?): ULongID(source)

将一个 ULong 委托为 ULongID.

e.g.

val id by uLongID { 123u }

作用域与应用场景

ULongIDDelegate.getValue 委托主要应用于对外的公开属性场景, 通过委托来减少某个对象在初始化时产生过多的简单包装器。

你需要避免一些错误的做法:

  1. 避免在一个类的私有作用域使用此委托,例如使用一个私有属性作为委托目标如下:

// Bad
class Foo {
// 私有属性没有代理的必要
private val id by uLongID { 123u }
}

你可以修改为

// Good
class Foo {
private val idValue: ULong = 123u
// 委托对外公开的属性而非内部应用的属性
private val id by uLongID { idValue }
}
  1. 避免在局部作用域使用此委托,例如一个方法中如下:

// 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


inline operator fun CharSequenceIDDelegate.getValue(o: Any?, property: KProperty<*>?): CharSequenceID(source)

将一个 CharSequence (通常为 String) 委托为 CharSequenceID.

e.g.

val id by stringID { "123" }

特别的,你可以在 stringIDcharSequenceID 的作用域中使用一些快捷能力, 例如通过 random 快速表示委托为一个随机字符串。

val id by stringID { random }

作用域与应用场景

CharSequenceIDDelegate.getValue 委托主要应用于对外的公开属性场景, 通过委托来减少某个对象在初始化时产生过多的简单包装器。

你需要避免一些错误的做法:

  1. 避免在一个类的私有作用域使用此委托,例如使用一个私有属性作为委托目标如下:

// Bad
class Foo {
// 私有属性没有代理的必要
private val id by stringID { "123" }
}

你可以修改为

// Good
class Foo {
private val idValue = "123"
// 委托对外公开的属性而非内部应用的属性
private val id by stringID { idValue }
}
  1. 避免在局部作用域使用此委托,例如一个方法中如下:

// 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


inline operator fun TimestampDelegate.getValue(o: Any?, property: KProperty<*>?): Timestamp(source)

将一个毫秒时间戳委托为 Timestamp.

e.g.

val now by timestamp { System.currentTimeMillis() }

特别的,如果你希望委托时间为当前时间,即 System.currentTimeMillis, 可以使用 TimestampDelegate.now 快速书写:

val now by timestamp { now }

作用域与应用场景

TimestampDelegate.getValue 委托主要应用于对外的公开属性场景, 通过委托来减少某个对象在初始化时产生过多的简单包装器。

你需要避免一些错误的做法:

  1. 避免在一个类的私有作用域使用此委托,例如使用一个私有属性作为委托目标如下:

// Bad
class Foo {
// 私有属性没有代理的必要
private val now by timestamp { now }
}

你可以修改为

// Good
class Foo {
private val nowMillis = System.currentTimeMillis()
// 委托对外公开的属性而非内部应用的属性
private val timestamp by timestamp { nowMillis }
}
  1. 避免在局部作用域使用此委托,例如一个方法中如下:

// 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

See also