【随笔·技术】Creating circular generic references

文章取自stackeoverflow上的一个问题的回答,链接在这里


Circular generic references are indeed possible. Java Generics and Collections includes several examples. For your case, such a specimen would look like this:

public interface P2PNetwork<N extends P2PNetwork<N, C>,
                            C extends P2PClient<N, C>> {
  void addClient(C client);
}

public interface P2PClient<N extends P2PNetwork<N, C>,
                            C extends P2PClient<N, C>> {
  void setNetwork(N network);
}

class TorrentNetwork implements P2PNetwork<TorrentNetwork, TorrentClient> {
  @Override
  public void addClient(TorrentClient client) {
    ...
  }
}

class TorrentClient implements P2PClient<TorrentNetwork, TorrentClient> {
  @Override
  public void setNetwork(TorrentNetwork network) {
    ...
  }
}

...

TorrentNetwork network = new TorrentNetwork();
TorrentClient client = new TorrentClient();

network.addClient(client);

推荐阅读更多精彩内容

  • 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
    SnailTyan阅读 3,485评论 2 7
  • ——草原三日之二日。 上篇的“草原三日”之一日,纪录了接触草原的第一天。该不过是凤毛麟角...
    位威阅读 504评论 0 5
  • 2017年10月1日 饺子是北方的常见食物。 过去条件不好,逢年过节尤其是春节才吃饺子,现在生活条件好了,只要愿意...
    鸡蛋西红柿阅读 146评论 0 0
  • 我常想:我和叶枫就像是发源于同一条河的两条支流,曾经交汇过,但最终都沿着自己的方向奔跑,流向完全不同的彼岸。 我已...
    晓风夜寒阅读 397评论 2 11
  • 看到刚毕业的大学同学住在只有一张小床大小房间里,突然就了解了生活。
    常小识阅读 117评论 0 0
  • 十一小长假,带着孩子回了趟老家,回家的时候和姐姐一家一起回去的,姐夫开的车。午饭过后姐姐一家返青,我...