在Scala中,所有抽象类型在擦除后都具有相同的类型

Béb*_*bul 2 scala type-erasure

以下代码无法编译,因为两个乘法运算符在擦除后具有相同的类型:(f: Object)Object

我知道类型擦除,但我见过的所有情况都擦除了泛型类型,如List[Int]或者List[String],在Scala双重定义中回答(2种方法具有相同类型的擦除).

如何让Scala对待不同类型的XxxT`类型不同?

trait AbstractTypes {
  type ScalarT
  type VectorT
  abstract class Operators(u: VectorT) {
    def *(f: ScalarT): VectorT
    def *(v: VectorT): VectorT
  }
}
Run Code Online (Sandbox Code Playgroud)

sjr*_*jrd 6

这DummyImplicit是为了什么:

trait AbstractTypes {
  type ScalarT
  type VectorT
  abstract class Operators(u: VectorT) {
    def *(f: ScalarT): VectorT
    def *(v: VectorT)(implicit dummy1: DummyImplicit): VectorT
  }
}
Run Code Online (Sandbox Code Playgroud)

DummyImplicit如果需要更多重载,其擦除相同,则可以包含任意数量的s.