Scala:存在类型和类型擦除

时间:2016-05-19 15:39:27

标签: scala existential-type erasure

我对scala不太熟悉,所以我希望我的问题有道理:

我有一个复杂的参数化类,但让我们恢复它:

class Foo[T] {
    def foo(x: T) = {/*do something*/}
}

现在在程序的另一部分,我想建立类似的东西:

val mylist = List[Foo[_]](new Foo[Int], new Foo[String], ...)

我希望能够做到这样的事情:

mylist(0).foo(2)

但是

  

类型不匹配:预期_ $ 1,实际:Int

我认为可以用TypeTags解决,但我无法适应我在这个主题上看到的任何材料。 在这里,我想告诉Foo它'应该由Int。

进行参数化

此外,在实际使用案例中,我会得到一个变量:

val x : Any 

我知道它与mylist(i)匹配,但我不知道位于mylist(i)的Foo [_]的类型或x的类型。但是,我想做一些像:

mylist(i).foo(x)

或在我的脑海里(但这在scala中几乎没有意义):

mylist(i).asInstanceOf(Foo[x.getClass]).foo(x.asInstanceOf(x.getClass))

我该怎么做?

我知道有很多关于这个主题的帖子,但我无法解决这个问题。

0 个答案:

没有答案