package Ġedu . gate ch . cs 2 3 4 0 . space tr ader redux . domain . entities . ship . types Ċ Ċ import Ġedu . gate ch . cs 2 3 4 0 . space tr ader redux . domain . entities . ship . Ship Ċ import Ġkotlin . reflect . K Class Ċ Ċ class ĠShip Factory Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġship Construct ors : ĠMutable Map < K Class < out ĠShip >, Ġ() Ġ-> ĠShip > Ġ= ĠHashMap () ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Ship ( F lea :: class ) Ġ{ F lea ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Ship ( G nat :: class ) Ġ{ G nat ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Ship ( Fire fly :: class ) Ġ{ Fire fly ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Ship ( M os qu ito :: class ) Ġ{ M os qu ito ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Ship ( B umble bee :: class ) Ġ{ B umble bee ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Ship ( Be et le :: class ) Ġ{ Be et le ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Ship ( Hor net :: class ) Ġ{ Hor net ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Ship ( Gr ass hop per :: class ) Ġ{ Gr ass hop per ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Ship ( Term ite :: class ) Ġ{ Term ite ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Ship ( W asp :: class ) Ġ{ W asp ()} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Ship ( ship Class : ĠK Class < out ĠShip >): ĠShip Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġship Construct ors [ ship Class ] !! () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġregister Ship ( ship Type : ĠK Class < out ĠShip >, Ġship Constructor : Ġ() Ġ-> ĠShip ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġship Construct ors [ ship Type ] Ġ= Ġship Constructor ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }