Souvenez-vous de cette phrase du livre Effective Java : Producer Extends, Consumer Super. C'est expliqué en détail ici : http://stackoverflow.com/ques...
Supplément
TreeMap a un constructeur :
public TreeMap(Comparator<? super K> comparator);
Vous pouvez réfléchir à la raison pour laquelle vous devez spécifier le type Comparator<? super K> au lieu de Comparator<K>
Je n'écris pas Java, mais tous les génériques sont interopérables. Il se trouve que je regardais le SDK de Taobao OPEN à ce moment-là. C'est le meilleur exemple réel pour expliquer les caractères génériques.
J'ai spécialement trouvé une version Java du SDK, voir : https://github.com/ggd543/tao...
Toutes les requêtes API sont traitées via execute, et cette méthode utilise la limite supérieure du caractère générique ? extends T pour limiter l'objet renvoyé à une sous-classe de TaobaoResponse.
Pour faire simple, c'est une contrainte.
Du point de vue du SDK Taobao, la plus grande valeur de la limite supérieure générique est que les résultats renvoyés par toutes les requêtes du SDK Taobao auront des paramètres communs tels que code et msg pour indiquer l'état de la requête de l'API. .
D'accord, revenons en arrière et regardons l'implémentation spécifique de execute :
Notez que catch dans le corps ici a localResponse et son type est T, mais ce T n'est pas un simple objet Object, car le type de T doit être un sous-enfant de TaobaoResponse gentil.
Cela signifie que lorsque T est instancié, son type est au moins une sous-classe de TaobaoResponse, et la définition de TaobaoResponse est comme ceci :
-- url: https://github.com/ggd543/taobao-sdk-java/blob/master/src/main/java/com/taobao/api/TaobaoResponse.java
public abstract class TaobaoResponse implements Serializable {
private static final long serialVersionUID = 5014379068811962022L;
@ApiField("code")
private String errorCode;
@ApiField("msg")
private String msg;
// more
}
Vous pouvez donc voir directement le code comme celui-ci :
localResponse.setErrorCode(e.getErrCode());
Écoutez, n'est-ce pas intéressant ? Tous les paramètres courants peuvent être traités uniformément.
Donc, du point de vue du SDK Taobao, c'est la signification des caractères génériques.
Souvenez-vous de cette phrase du livre Effective Java : Producer Extends, Consumer Super.
C'est expliqué en détail ici : http://stackoverflow.com/ques...
Supplément
TreeMap
a un constructeur :Vous pouvez réfléchir à la raison pour laquelle vous devez spécifier le type Comparator<? super K> au lieu de Comparator<K>
Je n'écris pas Java, mais tous les génériques sont interopérables. Il se trouve que je regardais le SDK de Taobao OPEN à ce moment-là. C'est le meilleur exemple réel pour expliquer les caractères génériques.
J'ai spécialement trouvé une version Java du SDK, voir : https://github.com/ggd543/tao...
Toutes les requêtes API sont traitées via
execute
, et cette méthode utilise la limite supérieure du caractère générique? extends T
pour limiter l'objet renvoyé à une sous-classe deTaobaoResponse
.Pour faire simple, c'est une contrainte.
Du point de vue du SDK Taobao, la plus grande valeur de la limite supérieure générique est que les résultats renvoyés par toutes les requêtes du SDK Taobao auront des paramètres communs tels que
code
etmsg
pour indiquer l'état de la requête de l'API. .D'accord, revenons en arrière et regardons l'implémentation spécifique de
execute
:Notez que
catch
dans le corps ici alocalResponse
et son type estT
, mais ce T n'est pas un simple objet Object, car le type deT
doit être un sous-enfant deTaobaoResponse
gentil.Cela signifie que lorsque
T
est instancié, son type est au moins une sous-classe deTaobaoResponse
, et la définition deTaobaoResponse
est comme ceci :Vous pouvez donc voir directement le code comme celui-ci :
Écoutez, n'est-ce pas intéressant ? Tous les paramètres courants peuvent être traités uniformément.
Donc, du point de vue du SDK Taobao, c'est la signification des caractères génériques.