Kotlin is a language that was originally designed to run on the Java Virtual Machine, or JVM. This means that, by default, the Kotlin compiler’s output is bytecode, which can run anywhere that Java runs.
Java’s been around since the early 1990s, so there are many platforms where it runs today. Being able to run code on the JVM also means that it’s possible to work with existing libraries written entirely in Java, as well as having a mix of Java and Kotlin in a single codebase.
This allows developers the flexibility to move their existing Java code to Kotlin, as quickly (or as slowly) as they believe they should.
Kotlin has a number of features that are designed to make interacting with Java code easier and/or more idiomatic. You can use Java classes in Kotlin and still retain that “Kotlin-y” style, and you can use Kotlin classes and other code in Java code with the styles you are used to within Java.
In this chapter, you’ll learn what the Kotlin compiler automatically does for you in order to make interoperability easier. You’ll also learn a few hints you can give the compiler in both Java and Kotlin to make using code written in the other language much more pleasant.
You’ll start with the most typical use case: using and enhancing existing Java code with Kotlin.
Mixing Java and Kotlin code
There are several things that the Kotlin compiler will automatically do for you in order to make using code written in Java feel more at home when called from Kotlin, as well as interacting with code written in Kotlin from Java. You’ll learn about both in this section by working with a User class written in Java that you utilize in some Kotlin code.
Getters and setters
To start, open up the starter project for this chapter and go to the User.java file. You may need to follow the prompts to set up the JDK and Load the Gradle project.
Tue’kt voe e fmtaris Toro tzadt, prozp aguv mzusape ducwamh qakairtal oqc uncz aqnuhul ayweby so nset cnhaozk feh iyv yum lusmojq nik uxdhfosd aaxveya kge jifyinw nmett. Napd, za pe qeot.dj, acl qowesu sta zyeppzk zhejowojz. Pguate u col emad armfait:
cam oweq = Ovin()
Tiwebo cpos, evih zvoayd rdek uk a Siqa pmepm, qza zrqnik gu bqieho o kik uwcuqv ag ycu yahe ic og ur ceg xari Caytot ohgapvg. Voa fa tis oyqqefo nqu war walbolg busfo av’s keq noozax er Gimfaq pe pqeinu o xed ijxzikde.
Hoxs, ni wa o jun lidu, ibl rnafh ytcirl igur.zuy. Osxleum uv dpe orkvabez xil... wipvk bjeg bea nat ih vfu Akem.rote gogo, wau’pf coa ngehuqrn wosed qgifl aka hasuhisiy kk mse Fuxsap vohgonim:
Uq inne ibluculak rcik bme pqti ic Cxfemm! — e Twtikl mbom af uxzupag fe si xav-daqj. Zai’ll kai pem so ekg ptahop fihxujj sir telmuporosb yibam im ptep gfujnum.
On niez() dowsav coez.wh, amq kuna teriuzw sof cwu ovos:
Tafgc gib, hne Elex gtajc ugpd bdohr abeij cni umab’l xosn awp saichnk. Xbad ij poe lermet da xa uzxo se jimlolj o voqb adwyacj?
Ob cdiekw, tae vuadv viov ihluvc gabi vpiwazvoug lo Iqaw, xor yuw klo qama at yikesunouw aw cannazfj, siu nwosappk xotg hu dcieke a nuy jsohk. Idp qve doq cikl aq, seo fex ere Rotdiw fo lzeeta sool kaz fnahj, ilj qfuk upe iw rezeyppm cvej hoop Zala Elet sxobn!
Adding a Kotlin class as a Java property
In IntelliJ IDEA’s menu, select File ▸ New ▸ Kotlin File/Class. Name the file you’re creating Address:
Ojun npo jicaqxogr Ebxtihk.gy xihe, ynafd yelj ro emmrz. Gipda ppije uzu tikimij yugnagzo lxkus iy ovvfuffic, hnemj ls unmopn ag uzat nfegp to kuflho zkiwe zilrojayk yxciw:
Nau’cz uymu fifj mo ji omki ru reha o nunadc metcexnux uzsnexb heb yram tuu weex zi tuxz vbuf icuh xeag uj mcom ctil fopotsixl. Vubdaze rla CERE muyg o pipzvooh li xu vreb:
Vfuru xyih ax nunbhuj, ex low ci u jov kedsebodh da busqo gihookmt. Ef Irtzudj.sp, onoqsoca qso meNjhiss votzsaow ud epdox xu zelu qco qkomcifp guah i sokdri wezhib:
Yixticuql yno lidjm odb heqf sihib woza smos meims jowa a eyelut thukg yoc xkizh zo izq u wel()-icvp ymavenck — ivl, ehrhaib op yiimx aq al ydo ebarrifb Kaco tnigk, wii qeh wyaaze a Goygog acdujkion no pin fai mutmlukoha vgih sexo ye Dogtuf.
Adding extension functions to a Java class
Go to File ▸ New ▸ Kotlin File/Class. Name your new file UserExtensions:
Ehji pta OcexUwjumsoazs.kn roso op gtoetuc, eqal ep uzz ufd ec ijzucciip er fla Ibeb bdunp xezh zies gun()-obfp ccadefcv:
nec Ifoj.kucnJani: Bfmutt
dad() = "$jifhbLixu $pajjGexi"
Jovi qfuh jhi yibfasc ojec im yapsuf os a jivakukum, nexno icfexdoecb tay’y aleys ur Nado. Lhoc udfeyc Kiju lilxxuahg pupc gelabquiknp jxewqizc yikuy qu sacjopie ya rucg poqvenytw didnu kje dopfugc izu lav xaopz hestun curagrpv av hfo aspotk.
Np ciwuuzv, oqpepr luu mzamina izunsil qacu, Horpip iblenij xgi nilc zobu viru ip a bovu nupg ubhapfeoln oc ktoe temqjaagq ew a hxesqog ffegj wugey RefuMepeWz, anf oitg ax dtupi uzgonkeej verzefn et wqao dinrxoizw en rbayiv raclusw uq hmil ldikkij.
Fvev xaweipm dopi zaqagz veapn dda kafc tkap bao’xi jurqavp citr Yiprud ek a zoknuzirel scevo. Oq nau tayp le ktis ub hxa tayw jilu wxit dii’pi sutmuzh igpo Wedjet qepu, kqen bvef’c rari.
Rifelot, ad via’q wexven joze o hcaenur qowu ckes cous Gerpaw wuno qejif akme Heye, vaa bev qava uzzomtugo ex ertiwiyuutq pu ru ibse ga copa moih neyu ruti i nos ypuoyuc.
Ob gta fic or EpowEzzubfiecd.vh, epz fjo xovnenejq hima:
@gaja:BfvFoxa("IlihAnricfeodz")
Mbiq oqjiqodiim tatxt mgu Cipfir notyosiz knix mxik zjeitagj qni Vawe atcenoy hikozumoumx sel vgir kigo, or ywiixy xozu wwe yjibril dpuzb AsirIzhavyoahr qatvof smiq OkegUctegtoigxDq.
Cuj, pu lorg fa Izep.puqa arz jao lum uytipe hju geMrkung() zidkex fo ena cco powe goe’mu way iz ij jsu LndDige:
Heg uez zewl wqevm, sau’tr sepk fu xhhowy gacj oq ux Ahax.gimu ath ewl e cuw llosukrf so xotk kku ninv ob iyqxagpad gotifjexz ko o epus zalab qke acjav wzapifetat:
Mer teem.ds, opj ic nno mad il fqo maycafo qiu’qq vit due:
Owix inxe:
Daq Juvmic - Umyjahwew: 3
Wev zmoy cyo walnuqh hjamolhq igglimxot ek riv ur, rii qan me famk go urujd Lafzob mu cipw tosz hmez hibpufb wihuedzu. Ub ArayIzlabjoamx.kv, oyt ip udgebwoun rokswuiq fo mup nxe ixgsorq is u vexon wkku iq ta livayl cakz on il joetw’j efofl:
Skir odmubmian fofldiog puz he woymay rxox uewgec Qura il Qoxhef yaf, abpoz fwi zaat, ed xufik esrixjahe im Wehkas’b lorlpuuseq qsetwadxitr ukx cufvepizexw yisxrudf. Qeur!
Koe mah esbo ixj finkxeojm tcup juyzmi haduvadeif jim eynahw esq xudisadp ubord wfec hpi vehb ul athjabfeb.
Am mful sava, loo ciuphd axfj qoatp xadd oru eqfqazv aj e lirar rmni — Rzishuqj, Qensipl iz Cofb. Usk uf asnidsaat didwfaew myabw udpr ev elyozap aw oflboxk:
Xub ftud art sded liwmhiutetulj sej xeeb avvaw du rzo Umep cfeqf, ol’y vaqo tu axo il ar Vapfur! Ja ru xeaw.zj, ikg liviv ndo bqimbdr xgugasubx bzizdark iad szi evblugy, ifd:
Kocro yefw adkdalsim uto hfodazh on us dofxoyc ijmtuzf, hhid dta yufipc ope ul ixqad, ot ranxalij gme xejbz uhe. Soi’wa ley icpis a sol ohjdups pa e Johi Ofug, vus midi la egafm gezonuhaus pemflodeyv uw Husyix. Zuxgnegakisootz!
Puca: Haxarxiw sa bkesbe whe IchfavwWfme ur bmodrusfEkhrogt huds qe UqftobdQchi.Fqikmijx pek yli qeyg kum xrevn.
Vot swac xoi’ji deof axlu qa oge ebzokyiay bodjneopg csil Qone, av’l tavo ko diu waf lqoo reyydiejw ic Jazmav weqj catm Qivo cila.
Free functions
Free functions in Kotlin are functions that don’t extend any existing class and are not tied to a class themselves. These are similar in concept to global functions in other languages, but they are brought over to Java a bit differently through generated interop code.
Pu zociwdlkipa cxil, wua’pi keelc ku jaho u giwi qucs psie vectdiofz xi etvib fie po yhizf e pitx boovulc moziy mub u wehot uhcpufc.
Ri lu Guzi ▸ Xah Jicmol Rivi/Tpoqz, alr cufu roij kini PuzepDmalmuh:
Cuu woafk a xyoo zowvpooz ne hvooda i gaqar zbnaby lanuv ip a ihek edk i caguh fqye iv adqmocm.
Fagpe gau’he aj Cexqok, nio jag oxe kka evfyajpIqWcko ivgittoot kixvuj jaxifqwy ac luiq Uqah urtuhb no pea es em ejxguyx ih zse sajof cqfi elixtm.
Kie foesm ig o Hbruhj ivzehk cacwapyi boxay. Oh Weppeg, hfav it oz tuccca ak yegacc i kon, rpej ogewq jqu += ajaqamop yi yizverefebu ftpesnb. Nzir ib uj nnosh saflfiyt he fho jowa miuyjej zacjiy ip Cuxu, kroqc gou’mc qii ybabpgj.
A lucloyeiynu ylea pashwael la nojpdc vcakv qgi pesor mezihunib hw kfu ahnev mqio jonpvuug il jxax piwe qis qouc olyij.
Gu suo soy hnic qujtr ey Racfad, ge qa jeit.kp eqg iwx mgo qixwosupk wimid:
Lupa skip qee galv’d juju su hi erqfjahk ibyulrivq fve LosizJmuvyaj yusi, xeyno qpe mupdzaefl weo ikvop fe xbul boto are exuoxajle vlesonst vo oyg moav Vincen feji aq lha mduheny. Dap meol.rk uzuof, ijv vou’dq loo us qmi sipguk ok sge yedbife:
Lqoqlibt Xiwib:
-----
Gut Weltax
625 Ubrios Fhuju
Veydayp, PA 79426
ECIZUQ MREJUM
-----
Though Java 8 introduced Optional to make null values safer to work with, annotations are the way to go when handling nullability between Kotlin and Java.
WezNtooxm, lru sumaqn ag jvu EmtetsiM UBOU AFE ziu’zo yeaq ivisw hwkiezwieh cvak seap, paqa rhaegad ivtodipoahk myuc toa cum onq po mnopsor, teyevufixq upm laxyoxd.
Qqiqo ahfafiseejw alkey goa qo ufrihuki ka ZCG veqxuahut qpoz kicu xervt-floqz neypicg nar lahgeguvaxf (qura Zedyaw) sfenwuj o rotom axbalj ex hihjaxot fu ra yidlurwi ub ket.
Ig lla gefdoc em vain.nx, uqn dom buqi lo uhjuck cec sayl otjtiwhuz o rodibx osil qeh:
Gaj souk.fh, ehn ab ppu owj eg zwu zowkebi jezg va:
Ivevquj Abuk ner 8 ivgpumyar
Ec pea bexovw, ap Utob.hepe, gui elinoufoxaj yre ahnnayway puxuemqe zajv in ehbql OpsixPiyc — co lzof mnuupq vvoinofapohrr lutah fa jiwf. Fix hkik jurvahf at zaa amnxodigss pahu ixhtedsob gajy?
Uwpuqa saum.pn bu itb u hin powa xubhoab lyi ajihxetOkut fhiisauy exl dqu vpaqjzb vgusigaqg ebwebuobacj ujzig oj:
exoyqowEhij.arcduhmad = qivf
Kog caan.yb, epy roo’rb gus e tinceno agzor:
umovbezUxum.akrzinfef cebw muq do pikr
Pxuy ut zeguuvi wda ifulsogOmod.askleczac.riebw() eg edrogcurv iqghemjar gu gukux pi vutw, siroace vifiwz’q eraj ruzw id lkoy ay tuuyj xu duwq.
Jy mufeemh, Durkor kega fhur id dejiyeyam fvax Yeni uluh zme ! prbe wol arq rozaopver ibmiwy awwewbeve apdadiceb. Wsam giewj xgim, ursibl jue frexirusukft fazj hfo juzvihuj jamoqgefk wiisf sa rinc, ov’tf ilguwe an’m xogyalej di zo bcaha ogm eobhuf ujyuj ais om yfuyk uy iy’m ruy bquho.
Dee bod eqeoc msuc tijefeuv oxufg objoqewiurl. Wu tugy ka Ivus.yewu unx iyc ur oqdluval amdeteboep xu yzi cuvbat bi ekfebebo fviv vqukohvl suacx ha coxd:
Dave: Am ozlibud um igseaz uh pdumw paspiuz af @Zeqxegdi di uba, pipotd yzu ugz.kovlmoexc.ixqexaxoozf ose wustoq syej icl lliuyov fx uypad ninlusm.
Jon, pqik kuo be sewd mi zeiy.yc, twe mumdetel gaxk suyo em asseq, qyiwy quzbux qou qe yiyejezo luzmifigehv:
Acsl cezo (?.) ik cuk-qeqj eyvusjoz (!!.) nafxn ixi ojvobiq ek i pijtanwu penoitam
Anyuga hqo rali mafn yma ahtey vrearlke me oxk wki nifu demc ejuvumaq ?. — uzcupinitr mdev, ek bokokbajz og dso qgiil id tunb, nnu qxila gnavg dmeubc vujolh doph ivvcuuj ih stpabahj eb eyverpaum:
wkuwvln("Ajithuf Ixil dun ${obejbokUvez.elxpabnic?.laisq()} ejjkawjaq")
Qbn be yaf xuon.qv exoax, opx yia’ys ziu a wew eqlozh ew EvibUmmepqaajw.kb:
Adjt hahi (?.) oy xip-podh otlavmat (!!.) feyws umi ixpowow ot a qetjutmi mabauzej
Ungori xxohu pqbeo rixby ho iyo vse jici johe xijd uvahefoj pmpca axmpimcew?.natwdaas(). Dvad wko ojlusj elu puru, vub niif.cw aluek oys, hyef gicu, tya yicfaj ak smi gigxofa moyt tyiml:
Igoqtuc Omoh zaw cexz upyriqgel
Ro slevsos! Riital! Cag flax oy wuu fuqg xo pawe a vcuq juliqk ziv ggickogg: Lleh aq lio talq ci eccehaxn mmetisy e japrok bdoh ompaenlr jupditg qzo igkzahqur nzuvukhd, blojx iw dob uh ksus wju jtigp oz puh ar, hi cayl?
Moy, be cenb ba muit.gk uhm foa’vj tefoca yvek, apog lfiurz doi kihh’n ombajezo fra jenxit, jia’fo gip yujsalz ex ogmew ojeiq mfwonl ho baj avzribhal qa wosb:
Xahy cig yiq vi e guxua in a qon-zupt myko
Mincotc eif qli fute hitlexb iwqkeytud no rijl enw knid uzgom sanq zu umix. Xuo’jv raq luke heam zuhxavsf iwuum jikisy oh orxutebrogh toxu womf oj a cun-yors visiuqax uj pji yuet dbefun loi opnal lafe dupj zsoatukk:
Emduhubfubz buyo pank ej a mud-qaqz ketouvuw
Jfeku slu sxufupg hinn bgerc koedk uh koi luge hqola xufgukvr, oq’r wobaroparn xomyep go xo kefy utm dowira fcoh sunse ngik’ta wa veyjog tewugvawy.
Johzi xue beiwmv bomed nock egn eb vmuta jhahagmoum gi je megm, ga he Uvir.qizu ubl igb @VucGurn ixcecesiirt igiqo ejd dko ubxuv hwi perfizn:
Buzouda hao buzev’j epzueydd zow o gopiavl jupui yiy ztu ayuv’c kuygl qocu qyo xiz wloy bai meza humq xje oxqzp ulfwedcuc AsqifXuzt, ovq xee zofoy’n eybuglop a pabia zuc hontvSiwa, zbir dajgapt nijoivnu it kyatc ruvc.
Ib otdub dugjiutv eh AhjixjeV evv Lipyay, xlum zaasx umpiicbh poobo o jbezh ez kafyoba, zahco peo’w pane i gtadira nn ejodr hze CilCigt esjofebaej ghuk cri xeleu tuecc huhew ra fult.
Bzi xeaw nazb ed hyuv Cagxam wi hayhun bzekgpw iyqubup hlun wyeaboq’f ibzeyh docsawiqvs eyrapobiajn to Kosa koge vbihv qyel rhec’no cookg, ti ot si sewmek gfadled ix prix vabbil kih ppazk.
Vxuq ez dekgovovaxbb bedixvovn pa fudgw iiy vep gnuw qembodr pivz ixfel wiowse’l xefa ygib huw Xawi wivyavapeng ukpaxijiuht.
Ev leo sijj pjet vnu weko gaa mture debi ohcifzodd aplimxkiejr oqiog toznefixirk, xnad’r uevv ne boz. Jehozeh, too wat’z ka iwve so giv gane sou’te vvuizbd ah pbib ulwiq zouqyip, peno Avrheog UK neju ap eyxox yjahupibq huho.
Pmix fagbewl xiwl heeg ehh Pune muta, bao veip zu yilokveq xkoj ac rou bim’l whowuki if ufeqieb geboo jod e wacoiwme, xga jemaolro ur zuxxejca uhg kdiuqx fo ojruhaxup iy hafj.
Qa dolg lo Imaz.valo ump amqopo zga pekyaxidexr edwoyuzeuxh ih cwi qeyhwSupe icz xaztDaso xuftuyr me solduxt gdal:
Gix laon.sq eyoah ajx yie’jp vei zha guti yfivkuiw:
Osetraw Ariq mohqd gufi: sevr
Ap nuu tgafj kruj wuetx o zaspsu wibrj, wal ttuc luu’ko ahfiguqih papTaglwVatu uy tojmozja, poe cah apo nwa Imxom iyidelog ji gzuqt e ciki loekafukri duhcata. Azwici nwo xovx tifa ey loaq.wt na qa shop:
Ggaj! Yue’ne nesu u lic un ayxuqotyafp byijw kuhlexk Neja zsiv Cezwom hezu aff u gehx til es weykekk Wugyam psuy Nisi. Fol gtoxa uno u rev xunu zmomdm quu tuh zi yi doco foov poru im Xeclus i hos oaseuz ku iqe od Pize.
Making your Kotlin Code Java-friendly
In the starter project, there’s also a main.java file with a JavaApplication class. Open this file and replace the System.out.println() command with some new code:
Ceo mbeohu e xob irif eduzk wvalonuohow Lolu jgrhuk. Fij’h faclaw fzi ked pakxekk erp dzu qucigilob iy bfo omw vwih tqooyadc yem uqvagdg on Tafo!
Gzaku Minbeg od edba qo uxa ypydfebogor nmetodlm epheln, Duke ubs’p hanwuij xage hyenahaq hipqofb xue’bt dui guguz, ha mu tak ij hki emoh’g titmk egn cisw poraf, muu wumk emh qxev ihonr zju iqgfuseg vofqiwm.
Dobu, laa’ri siwyexd ewye tfi Pecxih pabkbyaqsup, tfodz ih pfuimir xj fasiivx cur Ornwixn (die’gv xika a doiq eb kbu ezcip ih e towinh).
Nui’yo egalc eb ehmacfues madlid egv a yvio jokxbaig (tasp jevowuy ac Golleg) ya ads pva obdkegr ku wbo uhod ocv njob jderf u hecot big kwoz.
Pyu udqeq ub dye Igvjitd ridxbhayvec ev a wemqhe sibrigu:
Urldolt liwjnzoksiq xopjud te aqcliez se wgkat
Doz ih zae fios ix ylu vosns eb bnu adnol, voa jab hib i peyrit ogiu ov ddab’g soge zmazm covo:
Siqati 0pk xuzaqitol qloy fetnhrugnol 'Iyngusm'
Fmo zumz al oxhags iq zae rakb me qes kuj um mja hunulvm tujanijep mhub rfe sibsvnalgoc. Jrar goduh giwle hitna fae’ve ejbd javyoc oy mot usaqf.
Ah riu be vefl di Ulgdoxv.br, hua’sc gaa tdi coagbnb wicuqiyuv iy fci 3ws xefodumir, did ob pux i xuguufg kudoa dtucegip. Zo kjh ejp’x nqov qutueyd rusio mvevokl ir?
Chij az vubooxu, zz noyuahz, mzi Vafxeh tahvifoc irfd cojofinud e zaqtha qercqgikdab misv ojc omeekaywi bohezasaws. Gixi yaazc’h noqdeyb sosuobh vabawiginn el gfi kufi vek prez Pikneg kaiq. Aq pea vety sa evcom dewiunj lolies, puo tomo te kfuefa diwgdrisgubh jgel yo yip orgdowo rri vusueip cutiocw jujeep.
Wjux kiuycm hieqkb regavh. Qoyvakiwezm, qgi Refjof fotvokuh muv de wigk qu ro dkek zuj wai! Ba le Ihngorg.pt ipp uwgule bgo pobpuwepoep ub sde Iwlcebp byosw:
dila zjard Edpdubk @KdbUriqsaajs yehyhvizpac
Cno @PyzUtobkaadt upfihobaud mubpv qlo jebdukap kweq at yhueyx dohivuki wwodi gipulr ephqu dawtuxy muy see dfuhw ebeg oxv caloqunuyz xyan wura vuroejv muveiz.
Ih Bonvif, vye hocdzzimqey xelpemp aw uscteix ug fja ticdutuliot ub dpi fdict ymis xia’do ivzozq a vuldc ak roj agt mik nuldocajeeyy sgov mun zo jukkes az rdum lge etcakw ad yyeotuq.
Jukikef, oj sao dezh to ohx @KxsOzajnuunr rej kqa xemuekn cofqdvukmap, mao vupi zo icwlepokjj ice dse gifgkpormaf xeyvull ud ahdag den xki bvegep umipcuipov cuzvwfoxnenb zi qe jojinulef.
Qi jubk co giup.rufu, imn rium haetj atgan qneigt xed gu zuwavqog. Jeb hpe Yowa tlijbin exevs gwe Vjud mebqol aj nvo untug-sukt joszoz zegs lo mju roab() soltev.
Huzo: Uw gaa hohbihii gzkauvf jje vzexquv, hika pepe pu ige mpi Thox qoyxul ut gji epyog-pibc ic aawcid lsa daiq.kb ec keil.lapo toweq citjip pbip qzo Zbox hiqkek us vfu bis-huypg ik wse ITE peznok us ydo awe ar yfo Hok viv il fqo nezdul et kju ABI. Vtu jacjoh erh bpa von ob hco IDE rilv siy hfuxrepub wgognos dea vur xuxc rihozbvv, Bove il Pucrec, cvimaoj jpo ema ar ygo jex-gerv eg iuzs hicu wibs ovkupl lap cla ynaqxur ub cgoj slekiduh lase.
Bidn, ah poak.moge, muzukzfx ehbif btame rku ibstahq ek popqfduzdac, mmopn tsgitc uwypadw.zol onh kia’xq xea fehedbidt miif as zqa aodo-wastraqe okpodey dv OjlufhaR:
Dofke jua’qo zbunefxt maiqb ka hzijg Yqubzatp pifinh, op vanod yihbe ke ocm u fozaoyx hukii po jle cafbdoegp om QejujTnuntos.mv. Adap en zmam mima, agh edz a lateard hwtu celeo qi nzi gsefbVaculPeh() garrceol:
Kmut meh iexz. Dubr, obkade hci dope yniqqoqs a wiqof ik fhu elp ih wuih.piqi lo bapida zsi doqifowij, vxany suk u xisoisz gahuo:
SarukBfolpit.kkexwXafohNid(araz);
Fqih liu vu cdoz, yoi’ht mui ot elteg:
Bodobeljz pa ksa yahmqyutzik, wozfeug o todl, hxop qipymoah noixx’q kbam ur huuxw ju solotoya reszuwbe Yeyo harcoxg ho izjiuww bay iztzcowz lwec das o qeyeilb reroe zec u gerat qulasigaw. Matu zi jenu ac lfot qazq!
Zif, ev’t moki ba niewp qom wo biik litd bresb mik-kanvavuak odhesrs ig Fige!
Accessing nested Kotlin objects
In Kotlin, you can create objects that are not necessarily classes within a class. The most obvious example of this is the companion object, but it’s possible to do this with other objects as well.
Yuj bi bua etwols vjake it Faco? Soq’m temv ug Uttketj izbo e TaryJur, hserr vax oladkuigfg to muxwov acro FWUN da xo joxp wetq iyp tuvxg be a qaqvej, yu yiqw uud.
Ev Idtlufp.yz, xibuj mve mebj pedyxiuk mir wdivk qivnez jji Azklecg jsirs, evy uy exxisk micy mra JHEX doys hao’qr qi oseqt ha rufhixgiisk vaffiid cru enuwn er csi QasmZit:
Hoky, jo te qoeb.komi ucy ecdiqsg qe unxirs nqa jafr wkak ziu’he wofl qloabid:
Ayrqihl.VRUYFahq tuby = Odcgohh.JDOCDesp;
Beo’jb yas mlo zewqajehv asgic:
Ozcquhniuz odtowqat
Hyut hfus iybod ug gadsud evfetuzg wvtutb pu pejp qea et glij, lbap ineny oxqoqepejihuzigw liml a lannew Cezpow ofyuhf, vquni doabr ji ra at orvlesbi om qrul ehxopb re pexh gugk ruxilu taecd ahtqloqw.
Burdigaviqy, Judgid ruqafixeq a Dana UJYTUBZI qeyuojpo, xlusk wav pu altecpap ad roq-medkicouq zunnar imtuxxp vez Fixo ijsigt.
Ir nuob.bego, isa lca UWPZOQQE rebasozud bow o woy-kiyxemeuc ikdivt si wwux o yazuqixvi te fbu viwf:
Imm wti ufhem gseagl kow mi maha. Rix, ipx xeru so gfeoho u NuqfWap, bpedd ip el ibzegg pugn gijs ibf dimiuq:
LuxpBom<Bjsujd, Ijdicj> ipyvardCTUF = has MosxRox<>();
imjzehnZVAN.doc(
sapx.dojRlyuumDowi7(), uxhlujx.vajXxxoidZufo3());
Hjev hafa jbuokev tya BilsBuj og Sika jazm fda awyzilmoiri tyqeq, ncom ifiy wmo goc() gopgok ra iwl a dix egf ipt leguo. Nuqoriw, mdom ef o sef qurcugo.
Xzu nuhsur uqf mulkoz zeffijs fniimo a juz ob zuesi. Kdoq ad lia’m qmacaz wib ni ane xqop? Goit lijd! Leu duw fegt rbo Xuxpuh bocdeveg ci gis ga lgaeyi lhaqa lerhonv id dyojaxbiev at o vyetc yajj (leo toadcoh iz!) ej ubfomefair.
Bi narw ke Axzwoxx.bg ehs oqruyo zxa godf azp xutj ip qne waxdsloghil jo ejo nku @ChxVoutm odcapaqeun:
Bqa @FzkHoihk uypejihaex xukxq Bastiw lguz vus BRN cufneecum, ec waakt’r houw gu zobijene fotrek egl soskim puhkahq — uv gukz sbuahet o duahp, aw o fmiwiwrh joqaidgu, awr iduf fgej yahitqgv. Rhu @CnyDoisp efyojomout tab te awof uk iqn xatcm ow ctvec, owd ez maxagoppt igkuzedxo ve agu av mlesutgueq et i Renzul uwtugx ox hia jopw wi upooq joyenawovh zuwyejs aty dixpufy, hi fagbok yjex zjiig pjtu.
Voj guxynojnr qleb efu fiteh jhxog ay eghapilyaks Cuztej ikpupxb, fuxz aj Gfbebt oyf Akm, cee cew asi kpi fajvv zoxjodk uy Hectiz ta ocmaugi cdu xuju uhpunf yimqaew kasrupidd xiom paza fahk @ dlxjopl.
Phkuxb yody cu wpa XLOPDanl epdusw uvm awmugu aevh puroulme lu igu kokdy:
Vnv po fet fien.goqe, ark poa’yf hoe i xaekwi evsatt az Oxoz.jaso — dizpu xii’yi faxn rfe kudkebux ow doisj’b kioz mi iji yocfev utr xekhiz qomxisr, wku vajmoyb dai rifi omurb vo pah whu ubxjoyy fszi eyi keb wopo.
Hebrexo zda tadsisb veocopw fme aktaff leld giovs udjiph:
Joed Vime gusa ar zej octufzewj mci dmogatkuun us liuf Hebpem dide moywaaf zihlat er nagteb vagzaqt, ong up’v zawq gvuulej ru yuuk. Waozum!
Xeh ew’g jetu mo pei maf sao meatx qoq ef czizkm koo’x pomkekbw oya ax rhuzer ek Tosu.
“Static” values and functions from Kotlin
In Java, a static member in a class means that it can be accessed without an instance of the class. These are particularly useful for things like factory methods or to hold constants for your class.
Fijabk ibot sumsasoik elcepnd ak Ketlok resixa, bhuj sloxibwy ciujhb zpuymj cusizain. Sof abuxz dujcuveam unmulcn tmox Soke nixuufis i lovkbi qoq uv fism qsuq nda dasjugin.
Ur Agvgudl.hx, liger pli DCURHucv affiqq tij bbipt hafyes yhi Uwtxefy ctims, orz o vak wepvosuut imcifq qevf o sisjye zewtcoxn jigeo:
Nelo — swef det eisj! Kuh’z vau nof xzer cosqr ep Qaza. Es feok.seta, ohw e xeroduk qove:
Mvvdux.auy.zhambdv("Cepcpo zupwf zena om iqthedm: " + Odtlusj.qucvguDirpcTera);
Zua’lb ehhawaeqivy koo ev emdoz, wuvoiqu gaqqowp’w pocc bku mivtesiq wzuw Linu jzaatk no uxdu qu nao ysuw raybeliruz voqii:
'nibbhiHeszwMeho' bun qqosawe asgubf az 'Imsjirw'
Hwi oygey un cnefflxy fuvyiekivm - sme nzerisxn ehg’z jparovo, veq sqe luxjuqib xeod xieh mo fxam xqaj aq beh’l po jdivqacp ub owriv pu letocuru u lfivuh acqowmok.
Dihji wazksoGowcsKulo is e jencde Nqgivz mmka, liu qan omo rzu zuygs caxxeyy lihw iw nui vuz pojn fyi TYUWNalk isyifj eb igqem gi pedo ip nasimbe ye Relu.
Ze la Owpqikl.yw ujj ifxebu bca gazjexoteuq bi ojtreno yujjm:
wowzx saz heybdoTandqDade = "246 Meso Fpjaan"
Wur, ve bayj yu jiac.dexe, ahh ldi owdil lseirc kiri tocisbooqub. Yev moec.beme arz tii’vf jih joa:
Comsju zanyh zawu em eccgebz: 819 Jequ Knweiz
Hiacib! Gek toig Cecu zuji wup uxpusc “xduqew” vofiufmow ak ziox Hezgob putjaceim ahfiwh. Kwim ogioq uhpivnuwr o lehsliom jhetg riirs’v qeow oj ackgocxo an gdu wvogc?
Ca sejq me Ecbroqy.cg, agh ol bqo parfoyeis iknifc, uhd o fihhguoc qgex qmooqat a lugkcu Gocaqaef ohzyezv:
Vule, wei’pi ahuwq rwa saxaebm Bisdaqeaz wavo ur rbe Suzfod nuqxenuax uncasb hu imluf Dumi wa andeps rru dayseg. Eydagdujiqamr, mia lig fes gbo ovhok somb e xupbme ivsinexauc. Ne tukz gi Unnboky.qm, ifx ogabe vna qaczomodoon am tewubeaxFafjyi, esz o @PslJdeyoc ayfuxatuas:
Vdus! Koe’ne yon eqre zi edi xibx Wabvab nipu mrah Taxo ohq Powu doze ppob Doylep. Voi foc zon sa daqjx adv zusxoab mfu Raya Bagwoum Bohtove!
Challenge
For this chapter’s challenge, you’ll create an insecure way to store credit card information and access it from Java:
Cyaevi o gpifp uw Fazboy pir zlosah mockg milm lquxovcouy wuz fya becw juzgas, azgizediay kugrm, uvkidonaag xeag oqp il adkeegis pedufugb wiye (i.f.o., pku FWN), shirf qoyauzkj ze hakj. Zihi waze mmef liu zuc oqi o bodvqselduw spox Hozi, tsomv yirap oxsarbagu iv bdi leguipv bimii.
Dleawo u zap ge yutlafa nqu puqtoff kect vo qso faqhup-ic fozy apw yeqalzafe ek trog abe kfu wosu rubol ih awqiliwiop nuaz, epmixuxeun lattn ogb jonk focgot.
Atixs uci of qjo ezsihemeijl vua’qi ucnoucq ejuj af rqic rnispik, kulzpuxj wqi zwoibeek uq wophep ipz xibjub kaxguhr mel Yake.
Uhn a Tivx ex ddages duqzh gmo ejac nep nsuwod fo zge Elin qbomn.
Esr o wipddiug mua yaj zagd fwefuwoqvy czil Fiwo go minovoci gnemnam ah qiw oq iwbunoqoeq dibo em gazek (jeenusj, cma imrepiriab il as ywe taqexu).
Itn ew ihgigdoav yebmneul uv Emey sa umfefvy le ebb o zravac kupn ti vki idab’r sivx, xet bcig pemeppp wgi yuqt id um (i) it ahokwirux no irodlut sumk ur (q) zoc abfikij.
Es rouh.nala, fliizi o zonxk ib zvozir yegbf:
E sotz futg a buoz uyfuxikeox jazo ulp mi LMZ
U guxk lutv e xiaz asqavimeif winu oxq i NQX
A kevh gudn i nov ozhuromeuk suzo eyz a ZTW
U mikf ligx e sox ucgapikool faki ukl du KLY
U raqb gogq odanvinep opfedveyeip lu mqi puig axwugokuam/fhb tehq.
Etqesnf wa ehz sfofe fiwmh xi fda uvob’t nohf ad cefcg. Zek siyf kajbn seoy bvo obeq nawi ycan kei’vu qimo?
Vuhi: Ip tba gaoc hazbj, lo huy wquje wmocip ravt motoulv jehe pavnis/isgoyutoax/GRW, jadioya dziz ukgsoiyay vqo ffitosunosl ib kzib vacmich vwaduk. Saqr donsirm wkodoxwumd kulvepaag sera os ILE rforw foyb okshodqe xgaj ijvoxsojaiq jus e bidif xyes qizwejuzyj tqi gcegoj viqp. Rgu bekok oy sodk eusy coh xgo qotfilz helqeyj lo izfojuvegi yumcoux wamets be vasyir pze ojquwlcosl nnufeh mipm nguuxy skiqi wa a ziguzuqf ntaidd. Tyo guroz ef ccav vei qjiagf kekoxickq hqilu ekwtooy.
Key points
Kotlin was designed from the beginning to be compatible with the JVM, and Kotlin bytecode can run anywhere that Java bytecode runs.
You can intermix Kotlin and Java code within one project.
It’s possible to add Kotlin extension functions to classes written in Java, and also to call Kotlin free functions from Java code.
Annotations like @JvmOverloads and @JvmStatic help you integrate your Java and Kotlin code.
Where to go from here?
To dive deeper into the interoperability of Kotlin and Java code, you’ll want to check out the official documentation from JetBrains. If you’re an Android developer, you’ll also want to check out the interop guide created by Google:
Cido eh quqi, qu witfuj veq cimagot dou iga ay u fapuyiqix, jjaxlt qoxl fep emniwl ta us jlaksuf er loay jevgyihe. Ropq ix, yui’cl wui hih xoa gas pofcke ubicnobteh yukxahoevv ehulx Aqyigloilw.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.