Search code examples
kotlingetter-setter

Getters and Setters in Kotlin


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?


Solution

  • 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.