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.

  • ¿Cuáles son las semánticas de initialization de la class Kotlin?
  • Cómo usar null con kotlin @Parcelize
  • La configuration 'comstackr' está obsoleta, pero todas las configuraciones son 'implementación'
  • Kotlin para el desarrollo del juego
  • Métodos generics de Kotlin y inheritance
  • @Throws no tiene ningún efecto cuando el objective es una propiedad
  • ¿Cómo prohibir las llamadas a funciones con un cierto subtipo de un tipo de parámetro?
  • Android Kotlin child onClick bloquea a los padres OnTouch
  • Dagger2 - FragmentSubcomponentBuilder no implementa AndroidInjector.Factory
  • alerta abiertaDialog en kotlin, cómo configurar ambos posts con botones de radio
  • kotlin, cómo agregar la function de extensión al object compañero de class ya definido