import Ġhelpers . Fish Ċ import Ġhelpers . Food Ċ import Ġhelpers . Ug ali Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġ// Type ĠProjection Ġwith ĠUse ĠSite ĠVari ance ĊĠĠĠ Ġval ĠarrayOf Something : ĠArray < in ĠFood > Ġ= ĠarrayOf ( Ug ali ()) ĊĠĠĠ ĠarrayOf Something [ 0 ] Ġ= ĠU g ali () ĊĊĊĠĠĠ Ġval ĠarrayOf Something Else : ĠArray < out ĠFood > Ġ= ĠarrayOf ( Ug ali ()) Ċ // ĠĠĠ ĠarrayOf Something Else [ 0 ] Ġ= ĠFood () Ġ--> ĠW on 't ĠCompile ĊĠĠĠ ĠarrayOf Something Else [ 0 ] ĊĊĠĠĠ Ġstar Projection () Ċ } Ċ Ċ fun Ġstar Projection () Ġ{ ĊĠĠĠ Ġ// S af ely ĠRead ĊĠĠĠ Ġval Ġa : ĠA < *> Ġ= ĠA < B >() Ġ// ĠA < *> Ġ== ĠA < out ĠT > ĊĠĠĠ Ġval Ġtype ParameterName Ġ= Ġa . getType Parameter () :: class . java . simple Name ĊĠĠĠ Ġprintln ( type ParameterName ) ĊĊĠĠĠ Ġ// S af ely ĠWrite ĊĠĠĠ Ġval Ġc : ĠC < *> Ġ= ĠC < Int >() // C < *> Ġ== ĠC < in ĠNothing > Ċ } Ċ Ċ // Co variant Ċ class ĠA < out ĠT Ġ: ĠB > Ġ{ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun ĠgetType Parameter (): ĠT Ġ= ĠB () Ġas ĠT Ċ } Ċ Ċ // Contr av ari ant Ċ class ĠC < in ĠT > Ġ{} Ċ Ċ // Invariant Ġ= ĠD < out ĠB > Ġfor Ġreading Ġvalues Ġand ĠD < in ĠNothing > Ġfor Ġwriting Ġvalues . Ċ class ĠD < T Ġ: ĠB > Ġ{} Ċ Ċ open Ġclass ĠB Ġ{}