我正在寻找创建Google Guava中的转发集合的最佳实践:
例如,Scala中的ForwardingList如下所示:

   trait ForwardingList[T]
   {
      def delegate: List
   }

但是,我不清楚此列表应扩展哪些特征,并且由于许多候选对象而必须覆盖哪些方法
  • List[T]
  • ListLike[T, ForwardingList[T]]
  • ListLike[T, List[T]]
  • 最佳答案

    您想使用Proxy,它只需要定义val self: <Collection>。但是请小心,因为这些Proxy类返回该代理的集合,即SeqProxy返回Seqfilter等上的map
    ProxyLike类允许定义类型参数Repr,以进一步限制代理的返回类型。一个可以定义:

    class MySeqLikeClass[T] extends Seq[T] with SeqProxyLike[T, MySeqLikeClass[T]] {
      protected[this] def newBuilder: mutable.Builder[T, MySeqLikeClass[T]] = ???
      def seq: Seq[T] = ???
      def self: MySeqLikeClass[T] = ???
    }
    

    仅填写上述方法即可使MySeqLikeClass[T]Seq一样使用,并在所有函数上返回MySeqLikeClass[T],而不是像Seq[T]那样返回SeqProxy[T]

    09-18 01:19