Hi,
I am stuck at doing something very simple. I need to pass a reference to class, preferably at class constructor, but other means can be made to work too. Singleton does not work in following example.
Like so:
fun main(args: Array<String>) {
class Logger() {
var hours : Int = 0
}
class Simulate(val loggerRef : Logger) {
fun doSomething() {
loggerRef.hours += 1
}
}
val log1 = Logger()
val log2 = Logger()
val sim1 = Simulate(log1)
val sim2 = Simulate(log2)
sim1.doSomething()
sim2.doSomething()
sim2.doSomething()
println(log1.hours) //This should be 1
println(log2.hours) //This should be 2
}
ps. corected wrong syntax
That code runs correctly, if you fix the mistakes. “Class” should be “class”; “fun dosomething” should be “doSomething”; and log1, log2, sim1 and sim2 need to be declared as val or var, e.g. “val log1 = Logger()”.
I corrected the code and tested, it works, how is that possible? I thought kotlin does not pass references (objects will get “new” instantiation upon passing them), but apparently i was mistaken.
I couldn’t find an explanation in the Kotlin reference documentation, but see this: Function parameters are "val" not "var"? - #8 by abreslav
Kotlin passes objects by reference and not by value. The exception to this are primitive types eg. Int
, Float
, Boolean
, etc. I can’t find the place in the docs where this is described though.
Thank you for the clarification. I wish there were good books available on Kotlin (i have found one).
I got perhaps mixed up with Kotlin “Object”, which is a singleton. But in Java objects are the class instances.