iance ▁and ▁contra var iance . ▁ ▁Wild cards ▁are ▁flexible , ▁but ▁there ▁is ▁a ▁draw back . ▁While ▁use - site ▁variance ▁means ▁that ▁API ▁design ers ▁need ▁not ▁consider ▁variance ▁of ▁type ▁parameters ▁to ▁interfaces , ▁they ▁must ▁often ▁instead ▁use ▁more ▁complicated ▁method ▁sign atures . ▁A ▁common ▁example ▁involves ▁the ▁ ▁interface . ▁Suppose ▁we ▁want ▁to ▁write ▁a ▁function ▁that ▁finds ▁the ▁biggest ▁element ▁in ▁a ▁collection . ▁The ▁elements ▁need ▁to ▁implement ▁the ▁ ▁method , ▁so ▁a ▁first ▁try ▁might ▁be ▁ ▁< T ▁extends ▁Compar able < T >> ▁T ▁max ( Collection < T > ▁coll ); ▁ ▁However , ▁this ▁type ▁is ▁not ▁general ▁enough — one ▁can ▁find ▁the ▁max ▁of ▁a ▁, ▁but ▁not ▁a ▁. ▁The ▁problem ▁is ▁that ▁ ▁does ▁not ▁implement ▁, ▁but ▁instead ▁the ▁( bet ter ) ▁interface ▁. ▁In ▁Java , ▁unlike ▁in ▁C #, ▁ ▁is ▁not ▁considered ▁a ▁sub type ▁of ▁. ▁Instead ▁the ▁type ▁of ▁ ▁has ▁to ▁be ▁modified : ▁ ▁< T ▁extends ▁Compar able <? ▁super ▁T >> ▁T ▁max ( Collection < T > ▁coll ); ▁ ▁The ▁bounded ▁wild card ▁ ▁con ve ys ▁the ▁information ▁that ▁ ▁calls ▁only ▁cont rav ari ant ▁methods ▁from ▁the ▁ ▁interface . ▁This ▁particular ▁example ▁is ▁fr ustr ating ▁because ▁all ▁the ▁methods ▁in ▁ ▁are ▁cont rav ari ant , ▁so ▁that ▁condition ▁is ▁trivial ly ▁true . ▁A ▁declaration - site ▁system ▁could ▁handle ▁this ▁example