") ▁lets ▁objects ▁be ▁passed ▁to ▁methods ▁or ▁stored ▁in ▁fields ▁without ▁exactly ▁specifying ▁their ▁type ▁parameters . ▁This ▁is ▁particularly ▁valuable ▁for ▁classes ▁such ▁as ▁ ▁where ▁most ▁of ▁the ▁methods ▁do ▁not ▁mention ▁the ▁type ▁parameter . ▁ ▁However , ▁type ▁inference ▁for ▁exist ential ▁types ▁is ▁a ▁difficult ▁problem . ▁For ▁the ▁compiler ▁implement er , ▁Java ▁wild cards ▁raise ▁issues ▁with ▁type ▁check er ▁term ination , ▁type ▁argument ▁inference , ▁and ▁ambigu ous ▁programs . ▁( In ▁general ▁it ▁is ▁und ec id able ▁whether ▁a ▁Java ▁program ▁using ▁gener ics ▁is ▁well - ty ped ▁or ▁not , ▁so ▁any ▁type ▁check er ▁will ▁have ▁to ▁go ▁into ▁an ▁infinite ▁loop ▁or ▁time ▁out ▁for ▁some ▁programs .) ▁For ▁the ▁programmer , ▁it ▁leads ▁to ▁complicated ▁type ▁error ▁messages . ▁Java ▁type check s ▁wild card ▁types ▁by ▁replacing ▁the ▁wild cards ▁with ▁fresh ▁type ▁variables ▁( so - called ▁capture ▁conversion ). ▁This ▁can ▁make ▁error ▁messages ▁harder ▁to ▁read , ▁because ▁they ▁refer ▁to ▁type ▁variables ▁that ▁the ▁programmer ▁did ▁not ▁directly ▁write . ▁For ▁example , ▁trying ▁to ▁add ▁a ▁ ▁to ▁a ▁ ▁will ▁give ▁an ▁error ▁like ▁▁ ▁method ▁List . add ▁( capt ure # 1 ) ▁is ▁not ▁applicable ▁▁▁ ▁( actual ▁argument ▁Cat ▁cannot ▁be ▁converted ▁to ▁capture # 1 ▁by ▁method ▁inv ocation ▁conversion ) ▁ ▁where ▁capture # 1 ▁is ▁a ▁fresh ▁type - variable : ▁▁▁ ▁capture # 1 ▁extends ▁Animal ▁from ▁capture ▁of ▁? ▁extends