J'écris une application pour effectuer des calculs distribués dans un réseau pair-à-pair. En définissant le réseau, j'ai deux classes P2PNetwork et P2PClient. Je veux que ces génériques et ont donc les définitions de:Création de références génériques circulaires
P2PNetwork<T extends P2PClient<? extends P2PNetwork<T>>>
P2PClient<T extends P2PNetwork<? extends T>>
avec P2PClient définir une méthode de setnetwork (réseau T). Ce que je suis l'espoir de décrire avec ce code est:
- A P2PNetwork est constitué de clients d'un certain type
- Un P2PClient ne peut appartenir à un réseau dont les clients se composent du même type que cette client (la circulaire de référence )
Cela semble correct pour moi, mais si je tente de créer une version non générique tel que
MyP2PClient<MyP2PNetwork<? extends MyP2PClient>> myClient;
et d'autres variantes Je reçois de nombreuses erreurs du compilateur. Donc, mes questions sont les suivantes:
- est une référence circulaire générique même possible (je ne l'ai jamais rien vu interdire explicitement)?
- La définition générique ci-dessus est-elle la définition correcte d'une telle relation circulaire ?
- Si elle est valide, est le « correct » façon de décrire une telle relation (à savoir est-il une autre valide définition, qui est stylistiquement préféré)?
- Comment définir correctement une instance non générique d'un client et Server donné la bonne définition générique ?
Je n'ai toujours pas été en mesure de trouver une réponse définitive sur « est-il possible », mais de plus la lecture et les tentatives, je crois qu'il est possible de créer la définition, mais pas pour instancier les objets qui l'utilisent. –