Kotlin | Class Properties and Custom Accessors

The basic and most important idea of a class is the Encapsulation. It is a property to encapsulate code and data, into a single entity. In Java, the data are stored in the fields and these are mostly private.
So, accessor methods – a getter and a setter are provided to let the clients of the given class access the data. For sending notifications about the change or validating the passed value, additional logic is also present in the setter.

Property –

It is the combination of accessories and the fields in case of Java. In case of Kotlin, properties are meant to be a first-class language feature. These features replace fields and accessor methods. A property in a class is declared the same as declaring a variable with val and var keywords. A property declared as val is mutable and thus, can be changed

Defining a class :

filter_none

edit
close

play_arrow

link
brightness_4
code

class Abc(
    val name: String, 
    val ispassed : Boolean
)

chevron_right


Readable property – generates a field and a trivial getter
Writable property – a getter, a setter and a field

Basically what happens is that the declaration of the property declares the related accessors (both setter and getter for writable and getter for readable property). A field stores the value

Let’s see the class usage

filter_none

edit
close

play_arrow

link
brightness_4
code

class Abc(
    val name: String,
    val ispassed : Boolean
)
  
fun main(args: Array<String>) {
  
    val abc = Abc("Bob",true)
    println(abc.name)
    println(abc.ispassed)
  
    /*
    In Java
    Abc abc = new Abc("Bob",true);
    System.out.println(person.getName());
    System.out.println(person.isMarried());
  
    */
}

chevron_right


Output :

Bob
true

In Kotlin, the constructor can be called without new keyword. Instead of invoking the getter, the property is referenced directly. The logic remains the same and the code is much more concise. Setters of mutable property works in a similar manner.

Customer Accessors

Custom implementation of property accessor.

filter_none

edit
close

play_arrow

link
brightness_4
code

class Rectangle(val height: Int, val width: Int)
    val isSquare: Boolean
        get() {
            return height == width
        }
}
   
fun main(args: Array<String>) {
   
    val rectangle = Rectangle(41, 43)
    println(rectangle.isSquare)     
}

chevron_right


Output :

false

The property isSquare need no field to store the value. It only has a custom getter with the implementation provided. Every time the property is accessed, the value is computed .



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :

1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.