Quelle est la différence entre ce qui suit la signature 2 méthode:Java signature Méthode avec classe générique de retour
public <T extends MyClass> Set<T> getMyList() {...}
public Set<? extends MyClass> getMyList() {...}
Quelle est la différence entre ce qui suit la signature 2 méthode:Java signature Méthode avec classe générique de retour
public <T extends MyClass> Set<T> getMyList() {...}
public Set<? extends MyClass> getMyList() {...}
Pour première, vous pouvez l'utiliser comme:
Set<MyClass> set = thing.getMyList();
Set<MyDerivedClass> set = thing.getMyList();
Set<?> set = thing.getMyList();
Set<? extends MyClass> set = thing.getMyList();
Set<? extends MyDerivedClass> set = thing.getMyList();
Pour la deuxième, vous êtes plus limité:
Set<?> set = thing.getMyList();
Set<? extends MyClass> set = thing.getMyList();
Comment voulez-vous attendre à mettre en œuvre la première? La seconde est mauvaise car elle force le code client à utiliser des caractères génériques.
Dans le premier, T
est accessible dans le corps de la méthode, alors que dans le second il n'est pas. Que cela soit utile dépend du travail de la méthode.
Bizarre que vous deviez retourner retourner une "liste" en tant que 'Set'. :) –