به این قابلیت در Generics های جاوا، Wildcard می گویند. <?>list در جاوا معنی "لیستی از یک نوع نامشخص" یا "collection of unknown" می دهد، برای درک بهتر به مثال زیر توجه کنید:
List<String> listStr = new ArrayList<String>();
List<Integer> listInt = new ArrayList<Integer>();
List<?> list;
listStr.add("i1");
listStr.add("i2");
listStr.add("i3");
listInt.add(1);
listInt.add(2);
listInt.add(3);
for (String itemStr : listStr) {
System.out.println(itemStr);
}
list = listStr;
for (Object item : list) {
System.out.println(item);
}
list = listInt;
for (Object item : list) {
System.out.println(item);
}
همانطور که ملاحظه می کنید نوع Generics متغییر list بصورت WildCard تعریف شده و می تواند هر نوع لیست دیگری را در خود داشته باشد ولی نمی توان هیچ شئ از هر نوعی را با استفاده از متد add درون آن اضافه کرد!
برای اطلاع بیشتر، سوال "تفاوت استفاده از WildCard با Generics معمولی در جاوا چیست؟" را نیز مشاهده کنید.