在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()))