12
votes

Qu'est-ce que cela signifie pour une classe non générique d'étendre une classe générique

public class B extends C <A> {

}
What does this mean? That C needs to extend A? What extra restriction am I putting instead of just saying B extends C?

0 commentaires

6 Réponses :



1
votes

Classe B est un C .

C et B sont paramétrés avec un A . (Ce qui signifie qu'ils peuvent avoir des méthodes et telles que l'utilisation a méthodes ou les méthodes de classes qui descendent de a.)

Un cas d'utilisation classique pour cela serait que vous avez une DAO (objet d'accès aux données). Vous faites une DAO générique avec des méthodes de base, telles que genericdao avec une méthode générique Enregistrer . Pour ce faire, d'autres daos peuvent prolonger genericdao , vous paramètreez cette classe avec entité , et assurez-vous que toutes vos entités sont enregistrées. < / p>

alors vous avez genericdao et un tas d'implémentations de cela, par exemple userDao étend généricdao où l'utilisateur est une entité.


0 commentaires

18
votes

Dans ce cas, C code> est une classe qui peut prendre un paramètre générique et vous lui donnez un type spécifique A code> comme paramètre. Ensuite, B code> étend ce paramétrage spécifique de C code>.

Par exemple, supposons: P>

class C<T> {
    T example();
}

class B extends C<Integer> {
}


1 commentaires

L'exemple actuel n'explique aucun avantage d'avoir Classe B sur C directement. Il n'a aucun sens que s'il y a quelque chose de Integer - comportement spécifique dans B .



4
votes

Vous définissez une classe B qui hérite de la classe C, paramétré par type A. A doit être une classe ou une interface.

E.g. xxx

signifie que mystring est un arrayliste contenant uniquement des éléments (code>. Cette classe pourrait alors définir par ex. un concaténate () méthode qui renvoie la concaténation de toutes les chaînes dans la liste.

En raison de cette héritage, vous pourrez attribuer une instance à une liste list variable: xxx

mais vous ne pourrez pas l'affecter à list type variables de type avec d'autres paramètres: xxx


1 commentaires

java.util.list est une interface au cas où vous voulez corriger cela.



0
votes

en mots simples

Cela ne veut rien dire, sauf s'il y a des méthodes définies dans classe C ou ses ascendants , à Accepter ou type de retour A paramètres.

Ce faisant, vous garantissez la sécurité la sécurité en imposant des restrictions disant "Ils peuvent accepter ou renvoyer des objets de type A". < / p>


0 commentaires

0
votes
public class B extends C <A> {

}

If A is undefined there is no restriction on B( can be any the of Object Class).
If the Type of A is defined,then B must be of type A or a Subclass of A.

0 commentaires