▁with ▁less ▁cl utter ▁by ▁annot ating ▁only ▁the ▁definition ▁of ▁. ▁ ▁Compar ing ▁declaration - site ▁and ▁use - site ▁annotations ▁ ▁Use - site ▁variance ▁annotations ▁provide ▁additional ▁flex ibility , ▁allowing ▁more ▁programs ▁to ▁type - check . ▁However , ▁they ▁have ▁been ▁critic ized ▁for ▁the ▁complexity ▁they ▁add ▁to ▁the ▁language , ▁leading ▁to ▁complicated ▁type ▁sign atures ▁and ▁error ▁messages . ▁ ▁One ▁way ▁to ▁assess ▁whether ▁the ▁extra ▁flex ibility ▁is ▁useful ▁is ▁to ▁see ▁if ▁it ▁is ▁used ▁in ▁existing ▁programs . ▁A ▁survey ▁of ▁a ▁large ▁set ▁of ▁Java ▁libraries ▁found ▁that ▁ 3 9 % ▁of ▁wild card ▁annotations ▁could ▁have ▁been ▁directly ▁replaced ▁by ▁a ▁declaration - site ▁annotations . ▁Thus ▁the ▁remaining ▁ 6 1 % ▁is ▁an ▁indic ation ▁on ▁places ▁where ▁Java ▁benefits ▁from ▁having ▁the ▁use - site ▁system ▁available . ▁ ▁In ▁a ▁declaration - site ▁language , ▁libraries ▁must ▁either ▁expose ▁less ▁variance , ▁or ▁define ▁more ▁interfaces . ▁For ▁example , ▁the ▁Scala ▁Col lections ▁library ▁defines ▁three ▁separate ▁interfaces ▁for ▁classes ▁which ▁employ ▁cov ar iance : ▁a ▁cov ari ant ▁base ▁interface ▁containing ▁common ▁methods , ▁an ▁invariant ▁mutable ▁version ▁which ▁adds ▁side - effect ing ▁methods , ▁and ▁a ▁cov ari ant ▁imm utable ▁version ▁which ▁may ▁special ize ▁the ▁inherited ▁implementations ▁to ▁explo it ▁struct ural ▁sharing . ▁This ▁design ▁works ▁well ▁with ▁declaration - site ▁annotations , ▁but ▁the ▁large ▁number ▁of ▁interfaces ▁carry ▁a ▁complexity ▁cost ▁for ▁clients