Asignar un nuevo valor a las variables mediante el uso de método en Kotlin?

En Java, puedo usar [class-name]. [Method] para cambiar el valor de las variables en una class como:

public class Main { public static void main(String[] args) { // Prints "Hello, World" to the terminal window. test.teste(); test.printlnvar(); } } class test{ public static int a = 0; public static int b = 0; public static void teste(){ a = 9; b = 12; } public static void printlnvar(){ System.out.println("the value of A: " + a); System.out.println("the value of B: " + b); } } 

Sin embargo, ¿cómo puedo hacer eso en Kotlin? Lo bash, pero el resultado es siempre 0 para la variable IntColumn y IntRow en el siguiente código:

 public class drawTriangle{ public var IntColumn:Int = 0; public var IntRow:Int = 0; fun drawTriangle(){ this.inputRowandColumn(); this.Printvalue(); } fun inputRowandColumn(){ IntColumn = 12; IntRow = 3; } fun Printvalue(){ println("the value of rows is: ${IntRow}"); println("the value of column is: ${IntColumn}"); } } fun main(args: Array<String>){ drawTriangle().inputRowandColumn(); drawTriangle().Printvalue(); } 

En su function main , crea 2 instancias separadas de la class drawTriangle , por lo tanto, hay 2 sets de variables, una de ellas cambia, y una de ellas la imprime. Una solución corta:

 fun main(args: Array<String>){ val d = drawTriangle() d.inputRowandColumn() d.Printvalue() } 

PS Su código de Kotlin difiere drásticamente de su código de Java. En su fragment de Java, utiliza 2 campos static , que pertenecen a una class. Pero en el fragment de Kotlin, utiliza 2 properties de miembro, que necesitan instancias en las que almacenar.

PPS Su código de Kotlin se parece un poco a C #. Al aprender un nuevo idioma, no es una mala idea usar las convenciones de nomenclatura de ese idioma;)

No estoy seguro de por qué estás haciendo lo que estás haciendo. Según voddan, tu código no es equivalente. Java está utilizando statics, que están asociados con la class, y no una instancia, de ahí su capacidad para acceder a ellos directamente desde el método estático "principal".

Kotlin separa los elementos de class (estáticos) de los elementos de instancia. Si define una class, solo puede instanciar instancias y trabajar con ellas.

Si realmente desea implementar su bash en Kotlin, debe usar un 'object' en lugar de una 'class'. Un object en Kotlin es un singleton. Así es como lo escribirías en Kotlin.

 object drawTriangle { var intColumn: Int = 0 var intRow: Int = 0 fun drawTriangle() { this.inputRowandColumn() this.printvalue() } fun inputRowandColumn() { intColumn = 12 intRow = 3 } fun printvalue() { println("the value of Rows is: $intRow") println("the value of Column is: $intColumn") } } fun main(args: Array<String>) { drawTriangle.inputRowandColumn() drawTriangle.printvalue() } 

Tenga en count que eliminé el 'público' ya que el valor pnetworkingeterminado de Kotlin es público. Se quitaron los puntos y comas y se cambiaron las cosas para cumplir con los estándares de nombres de Kotlin.

  • ¿Cómo convierto un dígito Char (0-9) a su valor numérico?
  • Kotlin, el elenco inteligente es imposible debido a la expresión compleja
  • Animación consecutiva en TornadoFX?
  • Desarrollo de complementos Intellij IDEA. Acción "crear class kotlin"
  • ExpandableListView no se muestra en mi actividad
  • ¿Cómo inyectar NativeModules no estáticos y bajo demanda en React Native Android?
  • Android - Agregue UNDO SnackBar para deslizar para eliminar
  • ¿Cómo pruebo generadores para properties delegadas?
  • ¿Es posible usar doReturn () y CALLS_REAL_METHODS con mockito-kotlin?
  • Ejecutando testings con kotlin spek y kluent
  • Sin metadatos android.content.SyncAdapter