如何为java.lang.System类创建扩展函数?代码无法运行原因排查
问题原因
你的代码无法运行主要有两个核心问题:
- System类无法创建实例:java.lang.System是工具类,它的构造方法是private的,根本没法生成实例对象。而你定义的是实例扩展函数,这类函数必须依赖类的实例才能调用,没有实例自然无法正常执行。
- 静态方法调用方式错误:
currentTimeMillis是System的静态方法,不属于任何实例对象,你用this.currentTimeMillis调用是错误的——this指向的是System实例(但实例不存在),正确的调用方式应该是System.currentTimeMillis()。
正确实现方式
如果你想实现类似System.currentTimeInSeconds()的调用形式,可以通过扩展System类的伴生对象来实现(Kotlin允许为Java类虚拟出伴生对象用于扩展):
fun System.Companion.currentTimeInSeconds(): String { return (System.currentTimeMillis() / 1000).toString() }
这样就能直接通过System.currentTimeInSeconds()调用该方法了。
如果不需要严格绑定System类的调用形式,也可以直接定义一个顶层函数,写法更简洁:
fun currentTimeInSeconds(): String { return (System.currentTimeMillis() / 1000).toString() }
调用时直接写currentTimeInSeconds()即可。
内容的提问来源于stack exchange,提问作者B.56
相关产品推荐
相关产品推荐

