在kotlin的Math类中添加一个扩展函数
我在Kotlin的Math
类中增加了一个函数,但是我不能使用它,我之前用MutableList
做了这个, MutableList
它的工作,但是我不能用Math
类来完成。
fun Math.divideWithSubtract(num1: Int, num2: Int) = Math.exp(Math.log(num1.toDouble())) - Math.exp(Math.log(num2.toDouble()))
在数学上,您不能在静态级别使用此扩展,因为扩展只适用于实例。 编辑 :由于数学不能实例化,你将无法使用它的扩展。
如果你真的想把这个方法作为扩展,你应该扩展Int代替:
fun Int.divideWithSubtract(otherInt: Int) = Math.exp(Math.log(this.toDouble())) - Math.exp(Math.log(otherInt.toDouble()))
你会这样使用它:
val result = 156.divideWithSubstract(15) //:Double
如果你真的想在Java和Kotlin中使用static-ish方法,你可以在kotlin文件中定义任何包级别的方法。
因此, Util.kt
文件中的某些doSomething(args)
方法可以在任何Kotlin文件的任何地方访问,并且必须在Java中调用UtilKt.doSomething()
。
请参阅官方文档中的包级函数
你不能像静态java方法那样使用它,而只能用在Math
对象上。这就是为什么它在MutableList
工作的原因,因为你在列表中使用它。
你为什么要在这里扩展Math
? 扩展是有道理的,当你有一个接收器types(如String
例如),其实例要扩展。 Math只是一个util类, 不能被实例化 ,也就是说不可能为函数提供一个合适的接收器 。
只要在顶层创建这个方法,例如:
fun divideWithSubtract(num1: Int, num2: Int) = Math.exp(Math.log(num1.toDouble())) - Math.exp(Math.log(num2.toDouble()))