Я пишу приложение для выполнения некоторых распределенных вычислений в одноранговой сети. При определении сети у меня есть два класса P2PNetwork и P2PClient. Я хочу, чтобы они были универсальными и поэтому имеют определения:Создание круговых общих ссылок
P2PNetwork<T extends P2PClient<? extends P2PNetwork<T>>>
P2PClient<T extends P2PNetwork<? extends T>>
с P2PClient определения метода setNetwork (T сети). То, что я надеюсь, чтобы описать этот код:
- P2PNetwork состоит из клиентов определенного типа
- P2PClient может принадлежать только к сети, чьи клиенты состоят из же типа, как это клиент ( круговая ссылка)
Это кажется правильным для меня, но если я пытаюсь создать не-дженерик, такой как
MyP2PClient<MyP2PNetwork<? extends MyP2PClient>> myClient;
и другие варианты Я получаю многочисленные ошибки от компилятора. Так что мои вопросы заключаются в следующем:
- Является ли общий циклическая даже возможно (я никогда не видел ничего явно запрещающую его)?
- Является ли приведенное выше общее определение правильным определением такого кругового отношения ?
- Если это действительно, это «правильный» способ описать такие отношения (т.е. есть другое действительный определение, которое стилистический предпочтительные)?
- Как правильно определить необязательный экземпляр клиента и сервер с учетом правильного общего определения ?
я до сих пор не удалось найти однозначный ответ на «возможно», однако от дальнейшего чтения и попытки я считаю, что можно создать но не для создания объектов, использующих его. –