簡體   English   中英

通用類型的Scala通用

[英]Scala generics for generic type

假設我有這段代碼。 它不會編譯。 編譯器似乎認為foreach()中的e不是MyTrait的子類。

class MyCollection[T[A] <: MyTrait[A]](val iterable: Iterable[T]) extends Iterable[T]{
    override def iterator: Iterator[T] = ???
    def doStuffWithAll = iterable.foreach(e => e.doStuff)
}

trait MyTrait[T]{
    def doStuff = println("doing stuff")
}

該集合是MyTrait實現的集合的包裝,它將具有一些便捷方法。 我希望MyTrait也能通用,並確保MyCollection僅包含帶有type參數的MyTrait的實現。 那可能嗎?

您可以使用MyTrait[A]作為提供Iterator的類型

class MyCollection[A](iterable: Iterable[MyTrait[A]]) extends Iterable[MyTrait[A]] {
  override def iterator: Iterator[MyTrait[A]] = ???
  def doStuffWithAll = iterable.foreach(_.doStuff)
}

如果要按照嘗試的方式進行操作,則會忘記將A作為類型參數傳遞。

class MyCollection[A, T[A] <: MyTrait[A]](iterable: Iterable[T[A]]) extends Iterable[T[A]] {
  override def iterator: Iterator[T[A]] = ???
  def doStuffWithAll = iterable.foreach(_.doStuff)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM