import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠSmart Cast s Example Ġ{ ĊĠĠĠ Ġabstract Ġclass ĠAnimal ( val Ġname : ĠString ) ĊĊĠĠĠ Ġclass ĠC ow ( name : ĠString ) Ġ: ĠAnimal ( name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġm oo () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("$ name Ġsays ĠM OO !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠCat ( name : ĠString ) Ġ: ĠAnimal ( name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġpur r () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("$ name Ġsays ĠPR RR R !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnull Cast () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa : ĠInt ? Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġ// W on 't Ġwork , Ġa Ġcan Ġbe Ġnull ĊĠĠĠĠĠĠĠ Ġ// a . toDouble () ĊĊĠĠĠĠĠĠĠ Ġif ( a Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// A Ġgets Ġsmart - cast ed Ġfrom ĠInt Ġto ĠInt ? ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( a . toDouble ()). isEqualTo ( 1 . 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġclass Cast () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanimal : ĠAnimal Ġ= ĠC ow (" B ets y ") ĊĊĠĠĠĠĠĠĠ Ġ// W on 't Ġwork ĊĠĠĠĠĠĠĠ Ġ// animal . m oo () ĊĊĠĠĠĠĠĠĠ Ġif ( animal Ġis ĠC ow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimal . m oo () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( animal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCat Ġ-> Ġanimal . pur r () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠC ow Ġ-> Ġanimal . m oo () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Cast () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanimal : ĠAnimal Ġ= ĠCat (" Gar field ") ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( animal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCat Ġ-> Ġanimal . pur r () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠC ow Ġ-> Ġanimal . m oo () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ