enerische Zirkelreferenzen erstell

Ich schreibe eine Anwendung für verteilte Berechnungen in einem Peer-to-Peer-Netzwerk. Bei der Definition des Netzwerks habe ich zwei Klassen: P2PNetwork und P2PClient. Ich möchte, dass diese generisch sind und die folgenden Definitionen haben:

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

P2PClient<T extends P2PNetwork<? extends T>>

Mit P2PClient wird eine Methode für setNetwork (T-Netzwerk) definiert. Was ich mit diesem Code beschreiben möchte, ist:

Ein P2PNetwork besteht aus Clients eines bestimmten Typs Ein P2PClient darf nur zu einem Netzwerk gehören, dessen Clients aus demselben Typ wie dieser Client bestehen (der Zirkelverweis).

Das scheint mir richtig zu sein, aber wenn ich versuche, eine nicht-generische Version wie @ zu erstell

MyP2PClient<MyP2PNetwork<? extends MyP2PClient>> myClient;

und andere Varianten Ich erhalte zahlreiche Fehler vom Compiler. Meine Fragen lauten also wie folgt:

Ist ein generischer Zirkelverweis überhaupt möglich (ich habe noch nie etwas gesehen, das dies ausdrücklich verbietet)?Ist die obige generische Definition eine korrekte Definition einer solchen Kreisbeziehung?Wenn es gültig ist, ist es die "richtige" Art, eine solche Beziehung zu beschreiben (d. H. Gibt es eine andere gültige Definition, die stilistisch bevorzugt wird)?Wie kann ich eine nicht generische Instanz eines Clients und eines Servers bei entsprechender generischer Definition ordnungsgemäß definieren?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage