Argumentos pnetworkingeterminados de Kotlin en error de interfaz?

file kotlin

interface Test { fun test(message: String, delay: Int =100) } class A: Test { override fun test(message: String, delay: Int) { } } 

Me parece que no puedo usar @JvmOverloads en la interfaz ni en la class.

si agrego una @JvmOverloads en la interfaz, el error es @JvmOverloads annotation cannot be used on interface method , si agrego @JvmOverloads en la class, el error es platform declaration clash....

Sin embargo, parece que puedo usar parameters pnetworkingeterminados en files kotlin, como este.

 var a=A() a.test("1234") 

Pero cuando lo uso en un file java, parece que el método no está sobrecargado.

 A a=new A(); a.test("123");//Compile error 

La siguiente versión sin interfaz puede funcionar

 class A { @JvmOverloads fun test(message: String, delay: Int=100) { } } 

Entonces puedo usarlo normalmente en el file java

  A a=new A(); a.test("123"); 

¿Pero cómo mantener la misma funcionalidad después de agregar la interfaz?

Esto no es un error. @JvmOverloads anotación @JvmOverloads simplemente no funciona con methods abstractos.

De los documentos de Kotlin:

Normalmente, si escribe una function de Kotlin con valores de parámetro pnetworkingeterminados, será visible en Java solo como una firma completa, con todos los parameters presentes. Si desea exponer múltiples sobrecargas a llamadores de Java, puede usar la anotación @JvmOverloads.

La anotación también funciona para constructores, methods estáticos, etc. No se puede usar en methods abstractos, incluidos los methods definidos en las interfaces .

fuente: https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html#overloads-generation

¿Por qué? Como puede aprender del documento que mencioné, @JvmOverloads instruye al comstackdor a generar un montón de methods sobrecargados de Java, omitiendo cada uno de los parameters uno por uno, empezando por el último. Por lo que yo entiendo, cada método sobrecargado llama internamente al método con un parámetro más, y este parámetro adicional tiene un valor pnetworkingeterminado. Editar: vea el comentario de @hotkey aquí

Esto no funcionará con methods abstractos, porque no tienen ningún cuerpo. También la nueva interfaz Java tendría más methods, y sus implementaciones tendrían que implementarlos todos. La interfaz de Kotlin solo tenía un método.

  • (número + "Es más de 5") No se está ejecutando "Error de concatenación"
  • ¿Se espera que pueda llamar a una function con un object receptor pasando el object receptor como primer argumento?
  • ClassNotFoundException en sabor personalizado usando kotlin
  • No se puede comprimir Rxjava Observables
  • Cómo implementar el repository de interfaz en otro module de proyecto en AndroidStudio usando Dagger2 y Kotlin
  • ¿Cuál es la diferencia entre crossinline y noinline en Kotlin?
  • Recarga de la class Kotlin con objects / funciones complementarios
  • ¿Para qué sirve emptyArray () en Kotlin?
  • Mocktito ArgumentCaptor para Kotlin lambda con arguments
  • Cómo restablecer FrameLayout o eliminar el caching de layout
  • El file spring-configuration-metadata.json no se genera en IntelliJ Idea for Kotlin @ConfigurationProperties class