scala - 如何在 Scala 中访问类的类型参数

标签 scala types

我有一个类型参数化的抽象类,它包含一个 val 和一个都使用其类型参数的方法

abstract class Foo[T](val state: T){
  def foo(arg: T){
    ...
  }
}

我还有一个扩展这个抽象类并提供类型参数和 state 值的类

class Bar(myNumber: Int) extends Foo[Int](myNumber){
   ...
}

我传递了一个 Bar 的实例到另一个接受 Foo 的任何子类的类,我想调用方法 foostate ,但我遇到了一些麻烦:

class Baz(val f: Foo[_]){
    f.foo(f.state)
}

这给出了错误:

<console>:8: error: type mismatch;
 found   : Baz.this.f.state.type (with underlying type _$1)
 required: _$1
         f.foo(f.state)

有没有办法给Baz知识Bar的类型参数以便正确编译?或者这就是我想要做的?

编辑

澄清一下,我有很多类似于 Bar 的类延伸 Foo并提供自己的类型参数、状态和 foo 的实现.我希望我图书馆的用户能够将它们中的任何一个传递给 Baz不用担心类型参数 T因为它只是 Foo 的每个子类的实现细节.

所以我强烈建议不要这样做:

class Baz[T](val f: Foo[T]){
  f.foo(f.state)
}

最佳答案

你只需要一个

def fooOnState[T](ft: Foo[T]) = ft.foo(ft.state)

Foo[_] 调用它是可以的。

尽管如此,大多数时候最好避免存在性,但这取决于您的实际代码。

关于scala - 如何在 Scala 中访问类的类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23858615/

相关文章:

scala - Scala "global"函数列表?

parsing - 在Scala组合器解析器中忽略C样式的注释

javascript - 如何在 JavaScript 中舍入一个数字? .toFixed() 返回一个字符串?

scala - Scala 中路径依赖内部类型之间的关系

scala - 来自周围范围的隐式参数解析

scala - 在 ScalaFX 中更改散点图绘图点的大小和符号

c++ - 如何检查 C++ 字符串是否为 int?

类型在运行前被删除

c++ - 无法理解代码片段的返回类型

scala - 与 Play 的 SSL 握手在主机名上不匹配