Establecer una extensión de kotlin

No estoy seguro de si es posible configurar una extensión de kotlin como un object java.

En mi progtwig tengo una class java llamada Submission y quería crear una extensión kotlin de las categories llamadas, una ArrayList, así que lo hice así.

 var Submission.categories: ArrayList<String> get() { return this.categories } set(categories){ this.categories = categories } 

Sin embargo, cada vez que bash establecer una categoría, el progtwig simplemente se bloquea con un stackOverflowError como este:

 ERR: stack=java.lang.StackOverflowError: stack size 8MB at com.....setCategories(Extensions.kt:0) at com.....setCategories(Extensions.kt:19) at com.....setCategories(Extensions.kt:19) at com.....setCategories(Extensions.kt:19) at com.....setCategories(Extensions.kt:19) at com.....setCategories(Extensions.kt:19) 

Esta parece ser la syntax correcta para declarar extensiones de kotlin. Entonces, realmente no estoy seguro de en qué dirección debo ir para arreglar esto. ¿Tal vez debería simplemente estar usando una simple y antigua inheritance?

Gracias.

Su código arroja un StackOverflowError porque se llama recursivamente. this.categories simplemente llama al getter ya está adentro y this.categories = categories llama al setter en el que ya está.

Las properties de extensión son solo azúcar sintáctico para un par de getters y setters (de extensión). Dentro de los usuarios de la propiedad (es decir, el getter y el setter) solo puede acceder a lo que ya es public accesible desde la class receptora. Si tiene campos públicos, puede acceder a ellos, sin embargo, no puede definir nuevos campos. Si desea save el estado adicional pero la class no tiene API para eso, no tiene suerte.

Lo que normalmente hace una propiedad de extensión mutable es networkingireccionar a las funciones de mutación existentes. Aquí hay un ejemplo.

 //java class Foo { private List<String> items; public String myItems() { return items; } } //kotlin var Foo.firstItem: String get() = myItems()[0] set(value) { myItems()[0] = value } 
  • No se puede resolver la cadena suministrada al parámetro vararg en la function de extensión
  • Android Studio y Kotlin: reference no resuelta: también
  • Kotlin: Cómo extender la class enum con una function de extensión
  • ¿Puedo crear un método de extensión Kotlin para agregar una suscripción rxJava a una suscripción compuesta?
  • Función genérica de extensión de Kotlin con types básicos sin API de reflexión
  • Modificar "esto" en la function de extensión
  • ¿Los methods de extensión y las properties de extensión son malas prácticas?
  • ¿Cómo se pueden agregar methods estáticos a las classs de Java en Kotlin?
  • Función de extensión booleana
  • Propiedades de extensión de Kotlin no reconocidas en V1.0.1
  • Métodos de interfaz de anulación de Android kotlin dentro del método onCreateView ()