tutorial primary new expected define java constructor kotlin visibility

java - new - kotlin primary constructor call expected



Constructor privado en Kotlin (2)

Esto es posible usando un objeto compañero:

class Foo private constructor(val someData: Data) { companion object { fun constructorA(): Foo { // do stuff return Foo(someData) } } // ... }

Los métodos dentro del objeto compañero pueden alcanzarse como si fueran miembros de la clase circundante (por ejemplo, Foo.constructorA() )

En Java es posible ocultar el constructor principal de una clase haciéndolo private y luego accediendo a él a través de un método static public dentro de esa clase:

public final class Foo { /* Public static method */ public static final Foo constructorA() { // do stuff return new Foo(someData); } private final Data someData; /* Main constructor */ private Foo(final Data someData) { Objects.requireNonNull(someData); this.someData = someData; } // ... }

¿Cómo se puede alcanzar lo mismo con Kotlin sin separar la clase en una interfaz public y una implementación private ? Hacer que un constructor sea private lleva a que no sea accesible desde fuera de la clase, ni siquiera desde el mismo archivo.


Incluso puedes hacer algo más similar a "emular" el uso del constructor público mientras tienes un constructor privado.

class Foo private constructor(val someData: Data) { companion object { operator fun invoke(): Foo { // do stuff return Foo(someData) } } } //usage Foo() //even though it looks like constructor, it is a function call