beg*_*ner 0 time constructor internals game-engine kotlin
我有兴趣从kotlin 提供的包中实例化Duration类。Kotlin.time
到目前为止我的代码..
...
import kotlin.time
class MyGLRenderer : GLSurfaceView.Renderer {
override fun onSurfaceCreated(unused: GL10, config: EGLConfig) {
var tp0:Duration= Duration(10L)
//cannot acces `<init>:` it is internal in `Duration` }
override fun onDrawFrame(unused: GL10) {}
override fun onSurfaceChanged(unused: GL10, width: Int, height: Int) {}
}
Run Code Online (Sandbox Code Playgroud)
那么我该如何实现这个意图呢?
我也尝试过:
var tp0:Duration= Duration(Duration.)
//to find a getter or setter that can be used to pass the required `long` data type to
// the constructor but no function will return long data type
Run Code Online (Sandbox Code Playgroud)
你不应该能够。当库设计者像这样对最终用户隐藏函数或构造函数时,这是有原因的。这样做可能有多种原因,例如防止滥用该类或使其灵活地适应未来的变化,而不会破坏现有的最终用户代码。
在 的情况下Duration,构造函数的参数是内部定义的格式,其中 Long 的最后一位对值的精度进行编码。他们将其保密,因为这是一个实施细节。未来可能会改变。使用这种格式的值并不容易,并且很难在文档中清楚地解释。
例如,您上面的代码几乎肯定是错误的。代表什么意思10L?当数字编码两条不同的信息时,您将持续时间表示为十进制数字,这很奇怪。在十进制形式下,该值完全没有意义。
仍然可以使用反射来调用构造函数,但这不是反射的明智用途。这样做很脆弱,因为库作者可能会更改构造函数在内部解释的方式,并且它会默默地破坏您的代码并创建新的错误。
如果您只想创建 10 毫秒的持续时间,请使用10L.milliseconds。
| 归档时间: |
|
| 查看次数: |
375 次 |
| 最近记录: |