我尝试在java.lang.System
上创建一个扩展函数,将currentTimeMillis
的用法重构为以下返回String
的System.currentTimeinSeconds()
扩展方法。(这样做是为了避免重复代码并在代码中重用它)
这是我尝试过的,但它不起作用:
fun System.currentTimeInSeconds () : String {
return ((this.currentTimeMillis / 1000).toString())
任何指导,为什么这是不工作?谢谢。
3条答案
按热度按时间nmpmafwu1#
你不能这样做。Kotlin目前只支持对象上的扩展函数,而不是类,System是一个类。
wwwo4jvm2#
欢迎来到SO,首先,重申类和对象之间的区别很重要:
现在,你可以在这里找到大量关于Kotlin扩展函数的信息:
文件规定:
你可以为一个类或一个接口写一个你不能修改的第三方库的新函数。这样的函数可以用通常的方式调用,就好像它们是原始类的方法一样。这种机制被称为扩展函数。还有一些扩展属性,可以让你为现有的类定义新的属性。
如果你再往下看:
扩展函数内部的this关键字对应receiver对象(点之前传递的对象),现在可以在任何MutableList上调用这样的函数:
因此扩展函数作用于接收到的对象,而不是蓝图(类)本身。
System
是一个类,而currentTimeMillis()
是一个静态本地方法。因此,当你试图为它创建一个扩展函数时,你的扩展函数将在类本身上被调用,而不是在你的例子中的类的对象上,因为你沿着在从System
调用静态方法。接下来,你的需求真的需要一个扩展函数吗?你正在调用一个静态的,创建一个函数就足够了。(即你已经有了你需要的所有信息)
最后,可能值得阅读以下问题的一些答案:
希望这能帮上忙。
lf5gs5x23#
顺便说一下,在官方的Kotlin Evolution and Enhancement Process(KEEP)中有一个关于这个的建议。
您可以在Kotlin statics and static extensions中查看详细信息。
但不幸的是,我们不会看到near特性的任何进展,因为该提案已从当前的路线图中删除。
https:kotlinlang.org/docs/roadmap.html#new-items