package Ġr sk . kotlin Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġvar Ġm : ĠMeeting ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġnew Meeting Ġ= ĠMeeting () ĊĊĠĠĠ Ġ// Ġassign Ġnew Ġinstance Ġof ĠMeeting Ġto Ġnew Meeting Ġif Ġm Ġis Ġnull ĊĠĠĠ Ġnew Meeting Ġ= Ġm Ġ?: ĠMeeting () ĊĊĠĠĠ Ġclose Meeting ( new Meeting ) ĊĠĠĠ Ġclose Meeting ( m ) ĊĊĠĠĠ Ġ// ĠLet Ġonly Ġexecutes Ġblock Ġstatement Ġif Ġm Ġis Ġnot Ġnull ĊĠĠĠ Ġm ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġclose Meeting NonNull Not Change able ( m ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġclose Meeting NonNull Not Change able ( m : ĠMeeting ): ĠBoolean ? Ġ{ ĊĠĠĠ Ġprintln (" m Ġis Ġ$ m ") ĊĠĠĠ Ġreturn Ġif Ġ( m . can Close ) Ġm . close () ĊĠĠĠ Ġelse Ġfalse Ċ } Ċ Ċ fun Ġclose Meeting ( m : ĠMeeting ?): ĠBoolean ? Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( m ?. can Close Ġ== Ġtrue ) Ġm . close () ĊĠĠĠ Ġelse Ġfalse Ċ } Ċ Ċ class ĠMeeting Ġ{ ĊĠĠĠ Ġvar Ġcan Close : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġlateinit Ġvar Ġaddress : ĠAddress ĊĊĠĠĠ Ġfun Ġclose (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave ( o : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġo Ġis Ġof Ġtype ĠIS ave able Ġthen Ġsave able Ġis Ġo , Ġif Ġnot Ġsave able Ġwill Ġbe Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġsave able : ĠIS ave able ? Ġ= Ġo Ġas ? ĠIS ave able ĊĠĠĠĠĠĠĠ Ġsave able ?. save () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit ( addr : ĠAddress ) Ġ{ ĊĠĠĠĠĠĠĠ Ġaddress Ġ= Ġaddr ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠIS ave able Ġ{ ĊĠĠĠ Ġfun Ġsave () Ċ } Ċ Ċ class ĠAddress