Quiero tener una clase que envuelva algunas funciones sin la necesidad de instanciar la clase en sí. Por lo tanto, pensé que una clase abstracta es la candidata perfecta para esto. Sin embargo, parece que no puedo llamar a las funciones miembro dentro de una clase abstracta incluso si agrego el modificador open
a las funciones. Ejemplo:
abstract class MyAbstractClass { open fun showSomething() { println("Hello World") } } fun main() { MyAbstractClass.showSomething() //Shows unresolved reference }
Tenga en cuenta que estoy usando Android Studio 2021.1.1.Beta.4 por ahora. ¿Estoy entendiendo mal las clases abstractas?
Para su caso de uso, es posible que no necesite crear ninguna clase. Simplemente adjunte la función a un objeto. Por ejemplo:
object MyObject { fun showSomething() { println("Hello World") } }
Esta declaración se puede poner fuera de las clases por sí sola.
Luego puede llamar a MyObject.showSomething()
donde quiera.
Y en realidad también puede simplemente definir la función fuera de cualquier clase u objeto como
fun showSomething() { println("Hello World") }
y luego use showSomething()
donde quiera, pero tal vez sea una mala práctica hacerlo así.
Parece que quieres un objeto complementario y poner la función allí. La palabra clave open
solo abre la función que se anulará. Todas las clases en Kotlin son final
de forma predeterminada, por lo que no se pueden extender a menos que open
.
abstract class MyAbstractClass { companion object { fun showSomething() { println("Hello World") } } }
Ahora puedes usarlo sin instanciar nada:
fun main() { MyAbstractClass.showSomething() //Hello World }