gpt4 book ai didi

scala - 如何在 Scala 特征中获取参数化类型的运行时类

转载 作者:行者123 更新时间:2023-12-04 16:28:02 25 4
gpt4 key购买 nike

我正在尝试实现一个 Scala 特征来处理与需要我们创建的 Java 库的接口(interface)细节

我想做的是:

trait SomeTrait[A] extends JavaAPI {
def foo = {
callApi(classOf[A])
}

override def bar = {
foo
}
}

请注意, bar 实际上覆盖了基类中的方法,因此我无法更改它的签名。

我已经尝试了 Manifests 等的几种变体,但不能完全让它发挥作用。有没有办法获取参数化类型的运行时类?

最佳答案

这种味道应该可以解决问题:

trait SomeTrait[A] {
def foo(implicit ev: Manifest[A]) = {
callApi(ev.erasure)
}
}

更新 在某些时候,必须通过方法参数注入(inject) list 。如果特征可以具有构造函数,那么构造函数将是一个不错的选择。

事实上,他们可以!该特征具有与其混合的任何构造函数,因此如果您指定派生类必须定义的抽象 list ...
trait SomeTrait {
def ev: Manifest[_] //abstract
def foo = println(ev.erasure)
}

//this `ev` provides the implementation, note that it MUST be a val, or var
class Concrete[T](implicit val ev: Manifest[T]) extends SomeTrait

一切都好起来了。

关于scala - 如何在 Scala 特征中获取参数化类型的运行时类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4433725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com