如何在Kotlin中实例化带有internal构造函数的Duration类
如何实例化Kotlin标准库的Duration类?
Duration的构造函数被标记为internal,属于库内部使用的接口,对外不允许直接调用,得用Kotlin官方提供的API来创建实例,常用方式有以下几种:
1. 数字+时间单位扩展属性
直接给数字添加时间单位后缀就能快速创建对应时长的Duration,需要先导入对应的单位扩展:
import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.minutes class MyGLRenderer : GLSurfaceView.Renderer { override fun onSurfaceCreated(unused: GL10, config: EGLConfig) { // 创建10毫秒的Duration val tp0 = 10.milliseconds // 创建10秒的Duration val tp1 = 10.seconds // 创建5分钟的Duration val tp2 = 5.minutes } override fun onDrawFrame(unused: GL10) {} override fun onSurfaceChanged(unused: GL10, width: Int, height: Int) {} }
2. Duration伴生对象方法
通过Duration.Companion提供的静态方法创建,支持指定具体数值和单位:
import kotlin.time.Duration import kotlin.time.DurationUnit class MyGLRenderer : GLSurfaceView.Renderer { override fun onSurfaceCreated(unused: GL10, config: EGLConfig) { // 创建10毫秒的Duration val tp0 = Duration.ofMillis(10L) // 创建10秒的Duration val tp1 = Duration.seconds(10) // 自定义单位创建,比如10个时间单位(这里指定为秒) val tp2 = Duration.of(10, DurationUnit.SECONDS) } override fun onDrawFrame(unused: GL10) {} override fun onSurfaceChanged(unused: GL10, width: Int, height: Int) {} }
3. 数值转Duration扩展函数
如果已有Long类型的时间值(比如毫秒数),可以用toDuration()扩展函数转换:
import kotlin.time.Duration import kotlin.time.DurationUnit class MyGLRenderer : GLSurfaceView.Renderer { override fun onSurfaceCreated(unused: GL10, config: EGLConfig) { val millisValue = 10L val tp0 = millisValue.toDuration(DurationUnit.MILLISECONDS) } override fun onDrawFrame(unused: GL10) {} override fun onSurfaceChanged(unused: GL10, width: Int, height: Int) {} }
内容的提问来源于stack exchange,提问作者beginner
相关产品推荐
相关产品推荐

