Kotlin: hacer que la function de Java llame al infijo

Intenté hacer que la function pow de la class BigInteger estuviera disponible como function infija con el mismo nombre.

El problema es que ahora el operador pow infix se llama recursivamente.

¿Es posible hacer que la function Java se llame utilizando el operador infix con el mismo nombre que la function?

 package experiments import java.math.BigInteger infix fun BigInteger.pow(x: BigInteger): BigInteger { return this.pow(x); } fun main(args : Array<String>) { val a = BigInteger("2"); val b = BigInteger("3"); println(a + b) println(a pow b) } 

Causas:

 Exception in thread "main" java.lang.StackOverflowError at kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull(Intrinsics.java:126) at experiments.KotlinTestKt.pow(KotlinTest.kt) at experiments.KotlinTestKt.pow(KotlinTest.kt:6) 

Esto es porque cuando estás haciendo:

this.pow(x)

En realidad está recursando su function de infijo. BigInteger no tiene la function pow que requiere otro BigInteger, eso es lo que está definiendo aquí. Y no lo olvide, las funciones de infijo aún se pueden llamar con el operador de punto.

Lo que probablemente quisiste escribir fue esto:

 infix fun BigInteger.pow(x: BigInteger): BigInteger { // Convert x to an int return pow(x.longValueExact().toInt()) } fun main(args : Array<String>) { val a = BigInteger("2") val b = BigInteger("3") println(a + b) println(a pow b) } 

Si quiere reutilizar el método de pow de BigInteger, debemos convertirlo a un int. Desafortunadamente, esto es potencialmente con pérdidas y puede desbordarse. Es posible que desee considerar escribir su propio método de pow si esto es una preocupación.

  • Single.zip completando antes de Success
  • ¿Qué significa el código @TypeConverterAnnotation?
  • Combina Java con Kotlin en Android
  • Reflexión de Kotlin + generics
  • Cómo convertir Any to Int en Kotlin
  • kodein, inyecta datos a la class simple
  • Problema recursivo con toString en Kotlin
  • Android: el código funciona con api 19 pero no con api 24
  • ¿Cuál es el equivalente de este código de java a kotlin
  • La diversión de Kotlin regresa prematuramente
  • Hacer una breve statement if