In Java, for example, I can write getters on my own (generated by IDE) or use Annotations like @Getter in lombok - which was pretty simple.
Kotlin however has getters and setters by default. But I can't understand how to use them.
I want to make it, lets say - similar to Java:
private val isEmpty: String
get() = this.toString() //making this thing public rises an error: Getter visibility must be the same as property visibility.
So how do getters work?
Getters and setters are auto-generated in Kotlin. If you write:
val isEmpty: Boolean
It is equal to the following Java code:
private final Boolean isEmpty;
public Boolean isEmpty() {
return isEmpty;
}
In your case the private access modifier is redundant - isEmpty is private by default and can be accessed only by a getter. When you try to get your object's isEmpty property you call the get method in real. For more understanding of getters/setters in Kotlin: the two code samples below are equal:
var someProperty: String = "defaultValue"
and
var someProperty: String = "defaultValue"
get() = field
set(value) { field = value }
Also I want to point out that this
in a getter is not your property - it's the class instance. If you want to get access to the field's value in a getter or setter you can use the reserved word field
for it:
val isEmpty: Boolean
get() = field
If you only want to have a get method in public access - you can write this code:
var isEmpty: Boolean
private set
due to the private modifier near the set accessor you can set this value only in methods inside your object.