-
مزیت اول استفاده از wildcard این است که شما می تونید برای مجموعه کلکشین خودتون شرط بزارید یعنی اینکه بگید مجموعه شما می تونه کدوم نوع متغییر رو قبول کنه مانند مثال زیر.
Collection<? extends Cars> CarsCollection;
معنی دستور بالا اینه که این مجموعه از هر نوعی کلاسی که از کلاس Cars ارث برده می تونه باشه یعنی هر کلاس وارثی از کلاس Cars رو می تونید در این مجموعه بریزید که در آبجکت جنریک چنین قابلیتی ندارید.
-
مزیت دوم وقتی شما یک Collection<Object> استفاده می کنید یعنی یک مجموعه از آبجکتها و وقتی Wildcard استفاده می کنید به معنای واقعی می تونید از هر نوع آبجکتی برای پر کردن استفاده کنید. به مثال زیر توجه کنید، خط اول بدون مشکل اجرا می شود ولی خط دو با خطای کانورت مواجه میشه.
Collection<?> c=new ArrayList<String>();// Whitout Error
Collection<Object> c=new ArrayList<String>();//Error: incompatible types: ArrayList<String> cannot be converted to Collection<Object>
برای اطلاعات بیشتر:
http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html