はのは、次のことを想定してみましょう:Scalaの型消去問題
class Wrapper1 {
case class Condition(test: String)
}
object Wrapper1 extends Wrapper1
class Wrapper2 {
case class Condition[A](test: String)
}
object Wrapper2 extends Wrapper2
class Test
type T = // whatever
def test(fn: T => Wrapper1.Condition): X
def test[R](fn: T => Wrapper2.Condition[R]): X
}
問題は、型消去のこれらのメソッドは、消去後、まったく同じタイプを持っていることです。それは言うと第二の署名を変更するのは簡単です:
def test[R](fn: T => Wrapper2.Condition[R])(implicit ev: R =:= R): X
しかし、それはコンパイラが混乱し、他の場所でtest
方法を使用することは不可能です。多くの設計上の理由から、私はこのメソッドの名前の一貫性を維持しようとしています。これを成功させる方法はありますか?