{"id":99133,"date":"2019-10-10T13:00:41","date_gmt":"2019-10-10T10:00:41","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=99133"},"modified":"2019-10-09T12:28:24","modified_gmt":"2019-10-09T09:28:24","slug":"kotlin-data-classes-what-how","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html","title":{"rendered":"Kotlin Data Classes: Why, What and How?"},"content":{"rendered":"<p>In this post on Kotlin\u2019s data classes, we\u2019ll take a look at how data classes are better than regular Java POJO (Plain Old Java Object) classes, and how they make our everyday lives easier. We\u2019ll also take a look at some of the caveats of data classes.<\/p>\n<p>I\u2019ve also written an article on<strong> Java vs Kotlin<\/strong>, if you\u2019re interested, check it out here:<\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/ayusch.com\/kotlin-vs-java\/\">https:\/\/ayusch.com\/kotlin-vs-java\/<\/a><\/li>\n<li><a href=\"https:\/\/ayusch.com\/kotlin-tutorial\/\">https:\/\/ayusch.com\/kotlin-tutorial\/<\/a><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">Boilerplate!<\/h2>\n<p>Have a look at this Java class:<\/p>\n<div>\n<div id=\"highlighter_942054\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<div class=\"line number25 index24 alt2\">25<\/div>\n<div class=\"line number26 index25 alt1\">26<\/div>\n<div class=\"line number27 index26 alt2\">27<\/div>\n<div class=\"line number28 index27 alt1\">28<\/div>\n<div class=\"line number29 index28 alt2\">29<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java keyword\">class<\/code> <code class=\"java plain\">Dog{<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">private<\/code> <code class=\"java plain\">String name;<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">private<\/code> <code class=\"java plain\">String sound;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">private<\/code> <code class=\"java plain\">String age;<\/code><\/div>\n<div class=\"line number5 index4 alt2\">&nbsp;<\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java plain\">String getName() {<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">return<\/code> <code class=\"java plain\">name;<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number9 index8 alt2\">&nbsp;<\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">void<\/code> <code class=\"java plain\">setName(String name) {<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">this<\/code><code class=\"java plain\">.name = name;<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number13 index12 alt2\">&nbsp;<\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java plain\">String getSound() {<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">return<\/code> <code class=\"java plain\">sound;<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number17 index16 alt2\">&nbsp;<\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">void<\/code> <code class=\"java plain\">setSound(String sound) {<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">this<\/code><code class=\"java plain\">.sound = sound;<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number21 index20 alt2\">&nbsp;<\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java plain\">String getAge() {<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">return<\/code> <code class=\"java plain\">age;<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number25 index24 alt2\">&nbsp;<\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">public<\/code> <code class=\"java keyword\">void<\/code> <code class=\"java plain\">setAge(String age) {<\/code><\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">this<\/code><code class=\"java plain\">.age = age;<\/code><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>All of this ceremony for a simple Java POJO class used to hold some data. You might have used such classes when serializing\/deserializing a JSON response from an API. It provides you getters and setters for the properties.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>Now let\u2019s see how it\u2019s done in Kotlin with the help of data classes:<\/p>\n<div>\n<div id=\"highlighter_652154\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">data <\/code><code class=\"java keyword\">class<\/code> <code class=\"java plain\">Dog(var name: String, var age: String, var sound: String)<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Just a single line! We can go ahead and use this class in the same way as the java class. Getters and setters are compiler generated for us.<\/p>\n<p><strong>Even the methods such as toString(), hashCode() and equals() are compiler generated.<\/strong> Also, methods such as componentN and copy are generated but they have a caveat. We\u2019ll talk about them in upcoming sections.<\/p>\n<h2 class=\"wp-block-heading\"><b>Inheritance in Data Classes<\/b><strong>&nbsp;<\/strong><\/h2>\n<p><strong>Data classes<\/strong> are <strong>final<\/strong> by default. They cannot be <strong>abstract, open, sealed or inner<\/strong>. They can only inherit from other non-data classes (eg. sealed classes after 1.1,&nbsp; before 1.1 data classes can only implement interfaces).<\/p>\n<p>Data classes can override properties and methods from the interfaces they implement.<\/p>\n<div>\n<div id=\"highlighter_249555\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java keyword\">interface<\/code> <code class=\"java plain\">Animal{<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">val name:String<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">fun sound()<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number5 index4 alt2\">&nbsp;<\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java plain\">data <\/code><code class=\"java keyword\">class<\/code> <code class=\"java plain\">Dog(override val name:String):Animal{<\/code><\/div>\n<div class=\"line number7 index6 alt2\">&nbsp;<\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">override fun sound(){<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">println(<\/code><code class=\"java string\">\"Barks\"<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>We know that <strong>hashCode, toString and equals<\/strong> are auto generated for data class. But we can explicitly provide our own implementations of these in data class body. <strong>In such case, the explicit implementations are used.<\/strong><\/p>\n<p><strong>&nbsp;<\/strong><strong>We cannot provide explicit implementations of componentN() and copy() functions.<\/strong><\/p>\n<h2 class=\"wp-block-heading\"><b>ComponentN() functions in data classes<\/b><\/h2>\n<p>Component functions are used for <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/multi-declarations.html\">destructive declarations<\/a>. What it means is that we can do something like this:<\/p>\n<div>\n<div id=\"highlighter_592059\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">data <\/code><code class=\"java keyword\">class<\/code> <code class=\"java plain\">Dog(var name: String, var age: String)<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">val dog = Dog(<\/code><code class=\"java string\">\"Tom\"<\/code><code class=\"java plain\">, <\/code><code class=\"java string\">\"1\"<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number4 index3 alt1\">&nbsp;<\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">var (name, age) = dog <\/code><code class=\"java comments\">\/\/destructive declaration<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>It is not possible to provide an explicit implementation for componentN functions, these are generated by the compiler implicitly.<\/p>\n<p><strong>componentN<\/strong> functions are also a reason why data classes cannot inherit from other data classes. Quoting an engineer from the JetBrains team:<\/p>\n<p>\u201cYou can inherit a data class from a non-data class. Inheriting a data class from another data class is not allowed because there is no way to make compiler-generated data class methods work consistently and intuitively in case of inheritance.\u201d<\/p>\n<p>For example, the following code would give an error due to clash of component1 functions:<\/p>\n<div>\n<div id=\"highlighter_485018\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">open data <\/code><code class=\"java keyword\">class<\/code> <code class=\"java plain\">Resource (var id: Long = <\/code><code class=\"java value\">0<\/code><code class=\"java plain\">, var location: String = <\/code><code class=\"java string\">\"\"<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">data <\/code><code class=\"java keyword\">class<\/code> <code class=\"java plain\">Book (var isbn: String) : Resource()<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2 class=\"wp-block-heading\"><b>Copy() function<\/b><\/h2>\n<p>It is possible to create a clone of a data class in kotlin. When using copy, a shallow copy of the object is created.<\/p>\n<div>\n<div id=\"highlighter_527085\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">data <\/code><code class=\"java keyword\">class<\/code> <code class=\"java plain\">Dog(var name: String, var age: String)<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">val dog = Dog(<\/code><code class=\"java string\">\"Tom\"<\/code><code class=\"java plain\">, <\/code><code class=\"java string\">\"1\"<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number4 index3 alt1\">&nbsp;<\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">var dog2 = dog.copy()<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>It is also possible to pass named parameters to copy function. It\u2019s useful when you want to alter some properties while cloning, which is a frequent use case.<\/p>\n<div>\n<div id=\"highlighter_29354\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">data <\/code><code class=\"java keyword\">class<\/code> <code class=\"java plain\">Dog(var name: String, var age: String)<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">val dog = Dog(<\/code><code class=\"java string\">\"Tom\"<\/code><code class=\"java plain\">, <\/code><code class=\"java string\">\"1\"<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number4 index3 alt1\">&nbsp;<\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">var dog2 = dog.copy(name = <\/code><code class=\"java string\">\"Jack\"<\/code><code class=\"java plain\">)<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>Just as with componentN functions, it\u2019s not possible to provide explicit implementation of copy.<\/strong><\/p>\n<h2 class=\"wp-block-heading\"><b>Caveats<\/b><strong>&nbsp;<\/strong><\/h2>\n<p><b>Auto generated methods work only for primary constructor params.<\/b><\/p>\n<p>Let\u2019s have a look at this example:<\/p>\n<div>\n<div id=\"highlighter_817570\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">data <\/code><code class=\"java keyword\">class<\/code> <code class=\"java plain\">Dog(var name: String){<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">var age: Int = <\/code><code class=\"java value\">0<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number4 index3 alt1\">&nbsp;<\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">var dog1 = Dog(<\/code><code class=\"java string\">\"Tom\"<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java plain\">var dog2 = dog1.copy()<\/code><\/div>\n<div class=\"line number7 index6 alt2\">&nbsp;<\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java plain\">dog1.age = <\/code><code class=\"java value\">1<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java plain\">dog2.age = <\/code><code class=\"java value\">2<\/code><\/div>\n<div class=\"line number10 index9 alt1\">&nbsp;<\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java plain\">println(dog1.equals(dog2))<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>What do you expect to be printed on the console? Logically, since <strong>age of the Dogs<\/strong> are different, they should be different. Let\u2019s have a look at the output:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" width=\"640\" height=\"315\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/10\/Screenshot-2019-10-05-at-12.27.51-PM.png\" alt=\"\" class=\"wp-image-99138\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/10\/Screenshot-2019-10-05-at-12.27.51-PM.png 640w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/10\/Screenshot-2019-10-05-at-12.27.51-PM-300x148.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/figure>\n<\/div>\n<p><strong>Whoa!<\/strong> They are exactly the same. This happens because hashCode, toString and equals method only work on the constructor parameters of data class. So, when we check for equality, it compares the names of the animals and returns true.<\/p>\n<p><strong>According to documentation<\/strong>, compiler only uses properties inside primary constructor to generate functions. Component functions are also created only for primary constructor parameters.<strong>&nbsp;<\/strong><\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Primary constructor needs to have at least one parameter and all the fields must be marked var or val. To have a parameterless constructor, provide default values to all the parameters.<\/strong><\/li>\n<\/ul>\n<div>\n<div id=\"highlighter_418628\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">data <\/code><code class=\"java keyword\">class<\/code> <code class=\"java plain\">Dog(var name: String = <\/code><code class=\"java string\">\"Tom\"<\/code><code class=\"java plain\">, var age: String = <\/code><code class=\"java string\">\"1\"<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">var dog = Dog()<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<ul class=\"wp-block-list\">\n<li><strong>The generated componentN functions will override any similar implementation of componentN function in supertype.<\/strong><\/li>\n<li><strong>Triple and Pair are standard data-classes but it\u2019s better to use named data classes as they make the code more readable.<\/strong><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n<p>Data classes are one of the most useful features of <strong>Kotlin<\/strong>. Many Android Development interviews also include some questions on <strong>Kotlin<\/strong> and data classes are one of the focused topics.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>\n<p>Published on Java Code Geeks with permission by Ayusch Jain, partner at our <a href=\"\/\/www.javacodegeeks.com\/join-us\/jcg\/\" target=\"_blank\" rel=\"noopener noreferrer\">JCG program<\/a>. See the original article here: <a href=\"https:\/\/ayusch.com\/kotlin-data-classes-why-what-and-how\/\" target=\"_blank\" rel=\"noopener noreferrer\">Kotlin Data Classes: Why, What and How?<\/a><\/p>\n<p>Opinions expressed by Java Code Geeks contributors are their own.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In this post on Kotlin\u2019s data classes, we\u2019ll take a look at how data classes are better than regular Java POJO (Plain Old Java Object) classes, and how they make our everyday lives easier. We\u2019ll also take a look at some of the caveats of data classes. I\u2019ve also written an article on Java vs &hellip;<\/p>\n","protected":false},"author":100723,"featured_media":13674,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[785],"tags":[],"class_list":["post-99133","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kotlin"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Kotlin Data Classes: Why, What and How? - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Interested to learn about Kotlin Data Classes? Check our article explaining how data classes are better than regular Java POJO and ease our lifes.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kotlin Data Classes: Why, What and How? - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Interested to learn about Kotlin Data Classes? Check our article explaining how data classes are better than regular Java POJO and ease our lifes.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-10T10:00:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/06\/jetbrains-kotlin-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Ayusch Jain\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ayuschjain\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ayusch Jain\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/10\\\/kotlin-data-classes-what-how.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/10\\\/kotlin-data-classes-what-how.html\"},\"author\":{\"name\":\"Ayusch Jain\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/fe5b944d50caf6369a691cef4260167c\"},\"headline\":\"Kotlin Data Classes: Why, What and How?\",\"datePublished\":\"2019-10-10T10:00:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/10\\\/kotlin-data-classes-what-how.html\"},\"wordCount\":759,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/10\\\/kotlin-data-classes-what-how.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2013\\\/06\\\/jetbrains-kotlin-logo.jpg\",\"articleSection\":[\"Kotlin\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/10\\\/kotlin-data-classes-what-how.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/10\\\/kotlin-data-classes-what-how.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/10\\\/kotlin-data-classes-what-how.html\",\"name\":\"Kotlin Data Classes: Why, What and How? - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/10\\\/kotlin-data-classes-what-how.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/10\\\/kotlin-data-classes-what-how.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2013\\\/06\\\/jetbrains-kotlin-logo.jpg\",\"datePublished\":\"2019-10-10T10:00:41+00:00\",\"description\":\"Interested to learn about Kotlin Data Classes? Check our article explaining how data classes are better than regular Java POJO and ease our lifes.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/10\\\/kotlin-data-classes-what-how.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/10\\\/kotlin-data-classes-what-how.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/10\\\/kotlin-data-classes-what-how.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2013\\\/06\\\/jetbrains-kotlin-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2013\\\/06\\\/jetbrains-kotlin-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/10\\\/kotlin-data-classes-what-how.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JVM Languages\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/jvm-languages\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Kotlin\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/jvm-languages\\\/kotlin\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Kotlin Data Classes: Why, What and How?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/fe5b944d50caf6369a691cef4260167c\",\"name\":\"Ayusch Jain\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/Ayusch.Jain_-96x96.png\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/Ayusch.Jain_-96x96.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/Ayusch.Jain_-96x96.png\",\"caption\":\"Ayusch Jain\"},\"description\":\"Ayusch is a Software Engineer currently working in Android Development. He's worked long enough that he's transformed into an Android himself :P. Additionally, he also maintains a community of Android developers called: AndroidVille and writes about Android on his website: https:\\\/\\\/ayusch.com\",\"sameAs\":[\"https:\\\/\\\/ayusch.com\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/ayuschjain\",\"https:\\\/\\\/x.com\\\/ayuschjain\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/ayusch-jain\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kotlin Data Classes: Why, What and How? - Java Code Geeks","description":"Interested to learn about Kotlin Data Classes? Check our article explaining how data classes are better than regular Java POJO and ease our lifes.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html","og_locale":"en_US","og_type":"article","og_title":"Kotlin Data Classes: Why, What and How? - Java Code Geeks","og_description":"Interested to learn about Kotlin Data Classes? Check our article explaining how data classes are better than regular Java POJO and ease our lifes.","og_url":"https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2019-10-10T10:00:41+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/06\/jetbrains-kotlin-logo.jpg","type":"image\/jpeg"}],"author":"Ayusch Jain","twitter_card":"summary_large_image","twitter_creator":"@ayuschjain","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Ayusch Jain","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html"},"author":{"name":"Ayusch Jain","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/fe5b944d50caf6369a691cef4260167c"},"headline":"Kotlin Data Classes: Why, What and How?","datePublished":"2019-10-10T10:00:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html"},"wordCount":759,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/06\/jetbrains-kotlin-logo.jpg","articleSection":["Kotlin"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html","url":"https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html","name":"Kotlin Data Classes: Why, What and How? - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/06\/jetbrains-kotlin-logo.jpg","datePublished":"2019-10-10T10:00:41+00:00","description":"Interested to learn about Kotlin Data Classes? Check our article explaining how data classes are better than regular Java POJO and ease our lifes.","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/06\/jetbrains-kotlin-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/06\/jetbrains-kotlin-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2019\/10\/kotlin-data-classes-what-how.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"JVM Languages","item":"https:\/\/www.javacodegeeks.com\/category\/jvm-languages"},{"@type":"ListItem","position":3,"name":"Kotlin","item":"https:\/\/www.javacodegeeks.com\/category\/jvm-languages\/kotlin"},{"@type":"ListItem","position":4,"name":"Kotlin Data Classes: Why, What and How?"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/fe5b944d50caf6369a691cef4260167c","name":"Ayusch Jain","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/Ayusch.Jain_-96x96.png","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/Ayusch.Jain_-96x96.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/Ayusch.Jain_-96x96.png","caption":"Ayusch Jain"},"description":"Ayusch is a Software Engineer currently working in Android Development. He's worked long enough that he's transformed into an Android himself :P. Additionally, he also maintains a community of Android developers called: AndroidVille and writes about Android on his website: https:\/\/ayusch.com","sameAs":["https:\/\/ayusch.com","https:\/\/www.linkedin.com\/in\/ayuschjain","https:\/\/x.com\/ayuschjain"],"url":"https:\/\/www.javacodegeeks.com\/author\/ayusch-jain"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/99133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/100723"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=99133"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/99133\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/13674"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=99133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=99133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=99133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}