Estoy escribiendo una aplicación para hacer algunos cálculos distribuidos en una red punto a punto. Al definir la red, tengo dos clases, P2PNetwork y P2PClient. Quiero éstos para ser genérico y también lo han hecho las definiciones de:Creación de referencias genéricas circulares
P2PNetwork<T extends P2PClient<? extends P2PNetwork<T>>>
P2PClient<T extends P2PNetwork<? extends T>>
con P2PClient definir un método de setnetwork (red de T). Lo que espero para describir con este código es:
- Un P2PNetwork está constituido por clientes de un determinado tipo
- Un P2PClient solamente puede pertenecer a una red cuyos clientes consistirá en la mismo tipo que esta cliente (el circular de referencia)
Esto me parece correcto, pero si trato de crear una versión no genérica como
MyP2PClient<MyP2PNetwork<? extends MyP2PClient>> myClient;
y otras variantes Recibo numerosos errores del compilador. Así que mis preguntas son las siguientes:
- es una referencia genérica circular incluso posible (nunca he visto nada que prohíbe explícitamente)?
- ¿Es la definición genérica anterior una definición correcta de de tal circular relación?
- Si es válido, es que la "correcta" manera de describir una relación tal (es decir, hay otra definición válida, que es estilísticamente preferido)?
- ¿Cómo definiría correctamente una instancia no genérica de un cliente y un servidor dada la definición genérica adecuada de ?
todavía no he sido capaz de encontrar una respuesta definitiva sobre "es posible", sin embargo a partir de la lectura adicional y los intentos Creo que es posible crear la definición, pero no para crear instancias de objetos que lo usan. –