Criando referências genéricas circulares

Estou escrevendo um aplicativo para fazer alguns cálculos distribuídos em uma rede ponto a ponto. Ao definir a rede, tenho duas classes: P2PNetwork e P2PClient. Eu quero que eles sejam genéricos e as definições de:

P2PNetwork<T extends P2PClient<? extends P2PNetwork<T>>>

P2PClient<T extends P2PNetwork<? extends T>>

com P2PClient definindo um método de setNetwork (rede T). O que espero descrever com este código é:

Uma rede P2PN é constituída de clientes de um determinado tipoUm P2PClient pode pertencer apenas a uma rede cujos clientes consistem no mesmo tipo que esse cliente (a referência circular)

Isso parece correto para mim, mas se eu tentar criar uma versão não genérica, como

MyP2PClient<MyP2PNetwork<? extends MyP2PClient>> myClient;

e outras variantes, recebo inúmeros erros do compilador. Então, minhas perguntas são as seguintes:

É ainda possível uma referência circular genérica (nunca vi nada que a proibisse explicitamente)?A definição genérica acima é uma definição correta de um relacionamento circular?Se for válido, é a maneira "correta" de descrever esse relacionamento (ou seja, existe outra definição válida, que é estilisticamente preferida)?Como eu definiria corretamente uma instância não genérica de um cliente e servidor, dada a definição genérica apropriada?

questionAnswers(2)

yourAnswerToTheQuestion