Je hebt gelijk, het is geen kwestie van beter of slechter. Ik werk zelf gewoonlijk in C++ en daar is dat allemaal anders
Het verschil zit hem in hoe je functie ineen zit.
In foo2 maakt het niet uit wat er in de ArrayList zit. foo2 zal nooit expliciet de objecten erin manipuleren en hoeft dus het type niet te kennen en daar kan je dus gewoon die wildcard '?' gebruiken.
In sommige functies is het echter belangrijk dat je echt een functietype hebt omdat je misschien binnen foo1 nog andere generische functies op dat zelfde type moet uitvoeren of omdat je een element van dat type wil teruggeven.
Een eenvoudig voorbeeld is een functie die het grootste element van die arraylist moet teruggeven. Dat zou dan iets zijn als:
Code: Selecteer alles
public <T extends Comparable> T findLargest( ArrayList<T> l)
{
l.sort();
return l[0];
}
(pseudocode want ik gebruik nooit Java)
Hier moet het type T bekend zijn voor de functie findLargest omdat T zowel het type is van de elementen in de arraylist als het return type.
Lees ook vanaf "One question that arises is: when should I use generic methods, and when should I use wildcard types?" op
deze pagina.