Je veux avoir un objet de classe, mais je veux forcer quelque classe qu’il représente pour étendre la classe A et implémente l’interface B.
Je peux faire :
Ou :
mais je ne peux pas faire les deux. Y a-t-il un moyen de faire cela ?
Je veux avoir un objet de classe, mais je veux forcer quelque classe qu’il représente pour étendre la classe A et implémente l’interface B.
Je peux faire :
Ou :
mais je ne peux pas faire les deux. Y a-t-il un moyen de faire cela ?
En fait, vous pouvez faire ce que vous voulez. Si vous souhaitez fournir des interfaces multiples, ou à une classe et à des interfaces, vous devez avoir votre générique ressembler à quelque chose comme ceci:
<T extends ClassA & InterfaceB>
Voir les Génériques Tutoriel à sun.com, plus précisément le Délimitée Paramètres de Type de la section, au bas de la page. Vous pouvez réellement liste de plus d'une interface si vous le souhaitez, à l'aide de & InterfaceName
pour chacun ce dont vous avez besoin.
Cela peut être arbitrairement complexe. Pour le démontrer, voir la JavaDoc de la déclaration d' Collections#max
, ce qui (enroulé sur deux lignes):
public static <T extends Object & Comparable<? super T>> T
max(Collection<? extends T> coll)
pourquoi faire si compliqué? Comme dit dans le Java Génériques FAQ: afin De préserver la compatibilité binaire.
Il ressemble à cela ne fonctionne pas pour la déclaration de la variable, mais il ne fonctionne pas lors de la mise en générique de la frontière sur une classe. Ainsi, pour faire ce que vous voulez, vous pourriez avoir à passer par quelques étapes. Mais vous pouvez le faire. Vous pouvez faire quelque chose comme ça, de mettre un générique limites de votre classe, puis:
class classB { }
interface interfaceC { }
public class MyClass<T extends classB & interfaceC> {
Class<T> variable;
}
pour obtenir de l' variable
qui a la restriction que vous le souhaitez. Pour plus d'informations et des exemples, consultez la page 3 de Génériques en Java 5.0. Remarque, en <T extends B & C>
, le nom de la classe doit venir en premier, et les interfaces suivre. Et bien sûr, vous pouvez seulement de la liste d'une seule classe.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.