创建循环泛型参照
2022-09-02 03:42:52
我正在编写一个应用程序,用于在对等网络中执行一些分布式计算。在定义网络时,我有两类P2PNetwork和P2PClient。我希望这些是通用的,所以有以下定义:
P2PNetwork<T extends P2PClient<? extends P2PNetwork<T>>>
P2PClient<T extends P2PNetwork<? extends T>>
P2PClient定义了setNetwork(T网络)的方法。我希望用这个代码描述的是:
- P2P网络由特定类型的客户端组成
- P2PClient可能只属于其客户端与此客户端类型相同的网络(循环引用)
这对我来说似乎是正确的,但是如果我尝试创建一个非通用版本,例如
MyP2PClient<MyP2PNetwork<? extends MyP2PClient>> myClient;
和其他变体,我从编译器那里收到许多错误。所以我的问题如下:
- 通用循环引用是否可能(我从未见过任何明确禁止它的东西)?
- 上述通用定义是否是这种循环关系的正确定义?
- 如果它是有效的,它是否是描述这种关系的“正确”方式(即是否有另一个有效的定义,这在风格上是首选的)?
- 在给定正确的通用定义的情况下,如何正确定义客户端和服务器的非通用实例?