علامت ? یا wildcard در generic در جاوا چیست؟

+2 رأی
میانگین بازدید روزانه 0.5261 بازدید

علامت ? یا wildcard در generic در جاوا بیانگر چیست؟ آیا منظور همه‌ی آبجکت‌هاست؟ بنده این نکته رو می‌دونم که گاهی اوقات برای محدود کردن آبجکت استفاده میشه. مثلا:


Set<EntityType<?>> entities = entityManager.getMetamodel().getEntities();

اما به تنهایی چه مفهومی دارد؟ اگر منظور همه اشیاء است پس چرا به صورت rae type استفاده نمی‌کنن؟

سوال 3 ماه قبل در تالار برنامه نویسی توسط 1993 (246 امتیاز)
برچسب گذاری مجدد در 3 ماه قبل توسط moderator

1 جواب

+2 رأی
 
بهترین جواب

  raw type  بعلت اینه خطا رو افزایش میده نباید ازش استفاده کرد و فقط به خاطر  backward compatibility توی جاوا مونده.در واقع بعد از معرفی genericها در java5 استفاده چندانی نداره.

بله به معنای از هر نوعی هست

حالا درسته <?>  و raw type یهنی هرچیزی ولی باهم تفاوت دارن از این جهت که اولی امنیت بیشتری رو برات فراهم میکنه و سخت گیرانه تره.

به این صورت که <?> یعنی هرچیزیو میتونه نگه داری کنه ولی اگه بخوایم یه عنصر اضافه کنیم چون نوع عناصری رو که نگه داری میشه نمی دونیم پس نمی تونیم هیچی اضافه کنیم.

List<?> l = new ArrayList<>(Arrays.asList("iran",3,new person()));     // person is a class   

میتونیم موقع تعریف کردن هر چیزیو داخلش بذاریم و اگه بخوایم عناصرش رو بخونیم مثلا

public static void printList(List<?> s) {     
	for (Object o : s) {
		System.out.println(o);
	}

ولی اگه بخوایم چیزیو به این مجموعه اضافه کنیم نمیشه

l.add("ali");  // اینجا خطا میده

 حالا اگه اینو با  raw type بنویسیم:

 List l = new ArrayList(Arrays.asList("iran", 3, new person()));
        l.add("a");

خط اول که درسته هیچ ولی به خط دوم هم گیر نمیده.درواقع raw type هیچ محدودیتی نداره ولی موقع استفاده باید خیلی مراقب باشی چون از هر نوعی داخل اون میشه استفاده کرد.(خیلی به کار نمیاد در کل).

جواب 3 ماه قبل توسط HA (321 امتیاز)
ویرایش 3 ماه قبل توسط moderator
بله موافقم.

سوال های مشابه

0 رأی
1 جواب میانگین بازدید روزانه 0.18126 بازدید
سوال 1 سال قبل در تالار برنامه نویسی توسط یوری (426 امتیاز)
+1 رأی
1 جواب میانگین بازدید روزانه 0.23540 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.24621 بازدید
+2 رأی
1 جواب میانگین بازدید روزانه 1.2169 بازدید
سوال 1 ماه قبل در تالار برنامه نویسی توسط sina-deuxshiri (12 امتیاز)
0 رأی
2 جواب میانگین بازدید روزانه 0.491,160 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.06140 بازدید
+2 رأی
1 جواب میانگین بازدید روزانه 0.6762 بازدید
سوال 2 ماه قبل در تالار برنامه نویسی توسط 1993 (246 امتیاز)
0 رأی
1 جواب میانگین بازدید روزانه 0.12126 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.2967 بازدید
سوال 7 ماه قبل در تالار برنامه نویسی توسط HA (321 امتیاز)
+1 رأی
1 جواب میانگین بازدید روزانه 0.3289 بازدید
کانال تلگرام جواب یاب
...