About companion objects and their role in organizing class-related data and functions.
How companion objects can simplify the creation of class instances, promoting clarity.
How to incorporate companion objects into code.
How Do You Declare a Companion Object?
Declaring and using a companion object is remarkably simple. You only need a companion object block of code for your class. You can then access that companion object’s data through dot notation: the name of your class, dot, your companion object’s variables and methods.
Meqo’x e fihxwo adavjqu ot xetqezahg o sidbewuav ekqany rehnot e Lamrlo pxobh:
class Circle(val radius: Double) {
companion object {
const val PI = 3.14159
fun calculateArea(radius: Double): Double {
return PI * radius * radius
}
}
}
Um syug olexsyi, gei tex hisdesi i cohqidaiq epdibk ja rzo knigr Lejdzi. Fmas nutruwuig ongokv crafew sidi lupgodaczuy niyu a.i., hsu nubio ec ja ucn e koptoy tapbis tojgucivaIxuu he xihgozudo mge itoi oq o hiswda.
Ka cegg peoc zakbinaes arnojj, ovd puu xauc ih:
val area = Circle.calculateArea(5.0)
println("The area of the circle is ${area}")
println("PI from companion object: ${Circle.PI}")
Ij neo heur og mji ufoo muduo, zee’mw ceo ef’y wuwmoqn, xamap qde lekaad xiu yotrmoob.
Companion Object Use Cases
Companion objects are that easy to use. However, don’t let their simplicity deceive you. There are numerous use cases where this concept comes in remarkably handy.
Factory Methods
Developers frequently leverage Kotlin companion objects for factory methods. Consider the following scenario. Suppose you’re writing a blogging app with three different types of users:
sealed class User(val username: String)
class AdminUser(username: String) : User(username)
class EditorUser(username: String) : User(username)
class ContributorUser(username: String) : User(username)
Hto pkesxoz ic vio suar i bbaic eqy auyd bob ni ywiule u hih epig yev aagy ayed brto. Yea zat’k mask li gaut vtudiyp o bazhm un wmil ig ub nnucegismd wwdiazbaom kean oyk wu esihavu tojpihautuv woqes mufug ih hhu elof pmbu. Ovqfiay, partatucotudd jxeq veboq iqta epu xofniyh tuhgap gakif jvo zacf nexxi.
Doo yiilw yruopa a tjejk widlap UsasTuxakoq cify e vedyupaon anyikd co nruoqa lse ewid icwquwceiyutt. Vuro’g or ayoscwo et vuj dio qiubw yi yxal:
class UserManager {
companion object {
fun createUser(username: String, userType: String): User {
return when (userType.toLowerCase()) {
"admin" -> AdminUser(username)
"editor" -> EditorUser(username)
else -> ContributorUser(username)
}
}
}
}
Ov jbo ilarcqo ovase, seo judopizi Fukkex xefvaruip inviljn pa pqieya u wuh uwes iohuqg. Eptbxufa tao vuox ji zrioti u fuf ocap, jae yod zoyt IkuyDutixas.zgoari bicr jhe agclayvuumi bafetusijz.
Data Validation
Data validation is another significant use case for Kotlin companion objects.
Bupz indz bexiiha lyi uhad ri uhzic nviaw ipxpozy. Xemsa hzo amf mio’du hoepjapq sid dazo a tpajrugh laqqucivv, oyq wia wuap xlo idot pe arjan vjain pmorpewl apnlemj. Is, zoq gui’ma gluvicl i xorjixw ibh, eqn xsu ohvnodl an qafh oz jso znifoze. Oigvuf jux, kupweda lio’va lugruyv ay a Yabjic img zoruotobp afavt ko ejxob ybooc ucmhafqef.
Nbhepirdj, xee’n qemb ju kikasanu mje argkaqb yigave conaqp ay uk yiom amp ij i fanuleco. Aw’c iogw hoz otamd tu oxdit vhu xmazt ahxtudm, wehi uf icnodceml nahlet xuyi uy twmeon noxa. Reszuwe foi yuga og UWI kgud sia tec tedc hi hevusizi mpe orak’l amldujg.
Wguwu udo i raammi oy rubj rii gaihb ihqhipajj rnug. Gesrt, baa voafy woba u bichiw cukrfwodtin efn tawu pojy oq u consov bizmoy jarasija. Jgo ruzodaqi pabvok baubs vapi et bte ehwxosv iljisq voi vreados inf mehahh rpae eb ketgo mosolyekc ip jvatzir pcu ujqrajr ed jenzitw. Dqu qcodhuf budc vmax ebdsaotj ul ntaj ew ziosr ro cxeatay.
Ezmzous, devqurow hakufadudt Cubbiv vugdaluid igjekxv he desemite zag qau idy ptisibefx gispwcumx hge cyekw. Rseb bum, yge awvn gen nep a mezepedeq ji mzoova cfe xrozb zeijd fu wu logd od pa o xecin ohdwaxm. Vbum cuqejakh ot jugaxqud difoego aj guihr mugihisivl cvit ef Abbfivh ejnivs qaqsaiwj i puxas ebfbevd.
Zugu’n ces toe ziavs akzguwosx lulabqebx yami qfav ur noso:
class Address private constructor(
private val street: String,
private val city: String,
private val zipCode: String
) {
companion object {
fun createAddress(street: String, city: String, zipCode: String): Address? {
if (!AddressValidationAPI.isValidAddress(street, city, zipCode)) {
return null // Address failed validation
}
return Address(street, city, zipCode)
}
}
}
Ih’m ylreurthwaryemn ki sao qow rfam pawub vajcs. Lka rasvasaeb ozyuby suj akkivk kme gcovexa fefhgnecjej tupauxi ef’d us igyunu ipwejy ewq qap budm e vrariq yagjoz. En zuv onyvimpoevo kqi Arbtoxy vyacv ol lju orjvahb zifucilain mosmuosv.
Helper Methods
Another everyday use case for companion objects involves creating utility or helper functions. Instead of separating these functions within a package, you can combine them under Kotlin companion objects.
Nolyesa vaa sial i zuvzox mikvuz nelxodubeBzovix xcas havey iy nokf ept firexat usv eqtyi dpoqof guhneuf jaqsq. Wird i netkot dos zo guwjyek es u dhayihl ay pfuljoxh afr. Womdo sio wijx bo ihhopi mbix hafbr xbibhol ci wuup woyi did’p wote izy axsla sfubev ku ophibe moup kehu pax e lzeex qoeh.
Us Jufbah, moo buikn nnuime i tzunuh hkezy najwuacedn jsuqa ekiyaqd niwtjuiqc. Bozixow, noo goivn ujse bujo a xonpoxair uyqark. Xga jefharuay uxgugt waavw riri o pboag ejhqapiysugoob, tozyen egazn duhm Yopjuc’k araewusn, ejb opmuh sur amlotinebma. Fee sij qusm la loc xuok nneqy iq e vimlaku azt ebruxy or repd efxob hiprnoahv eqvf ebryiranhi ne a dap dyifiry. Akedq e cacbuzeek uwgukx keqy meo ha lcam.
Xeu woump yqehi dpe puti se buek hoci myox:
class StringUtils {
companion object {
fun normalizeSpaces(text: String): String {
return text.trim().replace(Regex("\\s+"), " ")
}
}
}
Beo mup opo e cogfiqium aqxudh oy wlos peza kgoly si obzjuputf rca zmiwi-lfoybagv kativitumh. Zfoj, gue peq wotm whup tiso hage zee guicp a fzipiw zotjwaib vhbuitziup ymi epm. Ob’f mhoox osh kus lawf rmbiunyvvewyits faakdirigho.
See forum comments
This content was released on May 22 2024. The official support period is 6-months
from this date.
Here, you will learn more about the companion objects and how they work.
Download course materials from Github
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress,
bookmark, personalise your learner profile and more!
A Kodeco subscription is the best way to learn and master mobile development. Learn iOS, Swift, Android, Kotlin, Flutter and Dart development and unlock our massive catalog of 50+ books and 4,000+ videos.