Добавить функцию расширений в класс Math в kotlin

Я добавил функцию в класс Math в Kotlin, но я не мог ее использовать, я сделал это раньше с MutableList и это сработало, но я не могу сделать это с помощью класса Math .

 fun Math.divideWithSubtract(num1: Int, num2: Int) = Math.exp(Math.log(num1.toDouble())) - Math.exp(Math.log(num2.toDouble())) 

Вы не можете использовать это расширение на Math на статическом уровне, потому что расширения работают только с экземплярами. edit : Поскольку Math не может быть создан, вы не сможете использовать расширения на нем.

Если вы действительно хотите, чтобы этот метод был расширением, вы должны расширить Int вместо этого:

 fun Int.divideWithSubtract(otherInt: Int) = Math.exp(Math.log(this.toDouble())) - Math.exp(Math.log(otherInt.toDouble())) 

И вы будете использовать его так:

 val result = 156.divideWithSubstract(15) //:Double 

Если вы действительно хотите использовать методы static-ish, в Java и Kotlin вы всегда можете определить любой метод на уровне пакета в файле kotlin.

Таким образом, некоторый doSomething(args) в файле Util.kt будет доступен в любом месте любого файла Kotlin, и вам нужно будет вызвать UtilKt.doSomething() в Java.

см.: Функции уровня пакета в официальном документе

Вы не можете использовать его как статические java-методы, но только на объектах Math . Именно поэтому он работал над MutableList потому что вы использовали его в списке .

Почему вы хотите расширить Math здесь? Расширение имеет смысл, когда у вас есть тип приемника (например, String ), экземпляры которого вы хотите расширить. Math – это просто класс утилиты и не может быть создан , т. Е. Невозможно предоставить соответствующий приемник функции.

Просто создайте этот метод на верхнем уровне, например:

 fun divideWithSubtract(num1: Int, num2: Int) = Math.exp(Math.log(num1.toDouble())) - Math.exp(Math.log(num2.toDouble())) 
  • Неразрешенная ссылка функции расширения Котлина в сборке Gradle
  • Настройка привязок Guice в Котлине
  • Доступ к функциям расширения Kotlin из Java
  • перегрузка + и + = операторов для «классов номеров»
  • Глобальная функция расширения в котлине
  • пусть, также, применять, takeIf, takeUnless в Котлине
  • Есть ли способ показать все функции расширения данного класса Kotlin в Intellij IDE?
  • Давайте будем гением компьютера.