[英]Scala wildcard for recursive generic definition
假設有以下特征定義:
trait MyTrait[A, B <: MyTrait[A, B]]
有一個實現:
class MyClass extends MyTrait[Int, MyClass]
熱門編寫通用部分 function 的簽名來過濾MyTrait
的任何實例?
def filterMyTrait: PartialFunction[MyTrait[_, _], Boolean] = {
case myClass: MyClass => true
}
或者
def filterMyTrait: PartialFunction[MyTrait[_, _ <: MyTrait[_, _]], Boolean] = {
case myClass: MyClass => true
}
兩者都在編譯時失敗
type arguments [_$1,_$2] do not conform to trait MyTrait's type parameter bounds [A,B <: MyTrait[A,B]] def filterMyTrait: PartialFunction[MyTrait[_, _ <: MyTrait[_, _]], Boolean] = {
嘗試使您的方法通用
def filterMyTrait[A, B <: MyTrait[A, B]]: PartialFunction[MyTrait[A, B], Boolean] = {
case myClass: MyClass => true
}
或使用存在類型
def filterMyTrait: PartialFunction[MyTrait[A, B] forSome {type A; type B <: MyTrait[A, B]}, Boolean] = {
case myClass: MyClass => true
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.