我需要在我的伴侣对象中定义一个val,该对象使用一个以伴侣类作为参数的方法进行初始化。
我想用特质处理这个问题,不要重复自己。我的问题是,X.getClass与classOf [X]不同。第一个是伴随对象的类,第二个是伴侣类的类,但是我需要在没有直接硬编码的情况下获得伴侣类。
基本上我需要这样的东西:
trait Foo {
}
object FooCompanionObject[f <: Foo] {
val fClazz = classOf[f]
}
// Bar's fClass should be classOf[Bar]
case class Bar extends Foo;
object Bar extends FooCompanionObject[Bar];
问题在于,由于类型擦除
,我无法获得泛型类答案 0 :(得分:11)
您的代码中存在几个问题。首先,如您所说,类型将被删除,第二object
s(object FooCompanionObject[f <: Foo]
)不接受类型参数,第三,object
s不能被删除({{1 }})。要做你想做的事,你必须为你的伴侣对象创建一个抽象基类,它接受一个类型参数,如果你愿意,它可以被约束到一个特定的类型,并且必须在object Bar extends FooCompanionObject
上进行上下文绑定。从ClassTag
开始,您可以通过调用ClassTag
来获取运行时类。最终解决方案可能如下所示:
runtimeClass