Por qué no puedo hacer reference a los arguments del constructor dentro de la class al definir el object

En este ejemplo f no se resuelve cuando se declara un object de bar :

 open class Bar(val b: Int) class Foo(val f: Int) { object bar : Bar(f) // ^ // Unresolved reference: f } 

Pero cuando declaro la bar como una variable, funciona bien:

 open class Bar(val b: Int) class Foo(val f: Int) { val bar = Bar(f) } 

Primero, verifiqué el documento de Kotlin sobre la definición de la palabra key Object: https://kotlinlang.org/docs/reference/object-declarations.html

Hay dos cosas, necesitamos saber:

  1. Expresión de object:

class abierta Bar (val b: Int)

 class Foo(val f: Int) { val bar = object : Bar(f) { } } 

Creó una instancia de una class anónima que henetworkinga de tipo Bar . Y se ejecuta (y se inicializa) de inmediato.

  1. Declaración de object:

El patrón singleton, que no puede tener constructores.

 open class Bar(val b: Int) object Foo { fun create(val f: Int) : Bar { return Bar(f) } } 

u object acompañante

 open class Bar(val b: Int) object Foo { fun create(val f: Int) : Bar { return Bar(f) } } 

Ok, volviendo a esta pregunta, creo que lo que quieres es la variable estática similar en Java. Incluso en Java, no puede ref el object de campo no estático del campo estático.

Y no use el object de esta manera:

 class Foo(val f: Int) { object bar : Bar(f) } 

que acaba de declarar una class interna anónima, usa el bloque de object complementario en su lugar, aunque todavía no puede ref de las variables externas.

  • ¿Hay alguna forma de reutilizar una instancia de Job?
  • Emitir matriz de bytes a Json con Fuel and Result
  • RegisterResGeneratingTask está en desuso, use registerGeneratedFolders (FileCollection)
  • Integración de HTML y CSS con Kotlin y Spring MVC
  • Clase de datos que henetworkinga de la class Java
  • ¿Cómo funcionan las funciones de extensión de Kotlin?
  • Diferencia sutil cuando se ejecuta en intellij y ejecutando jar
  • Propiedad de superclass no inicializada en class Derivada
  • Acceda a Integer.class desde Kotlin
  • Kotlin runtime jar vs kotlin stdlib jar
  • Azulejos vacíos de color MapView en Android