Scala:在伴侣对象中获取伴侣类

时间:2013-06-13 10:52:16

标签: scala companion-object

我需要在我的伴侣对象中定义一个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];

问题在于,由于类型擦除

,我无法获得泛型类

1 个答案:

答案 0 :(得分:11)

您的代码中存在几个问题。首先,如您所说,类型将被删除,第二object s(object FooCompanionObject[f <: Foo])不接受类型参数,第三,object s不能被删除({{1 }})。要做你想做的事,你必须为你的伴侣对象创建一个抽象基类,它接受一个类型参数,如果你愿意,它可以被约束到一个特定的类型,并且必须在object Bar extends FooCompanionObject上进行上下文绑定。从ClassTag开始,您可以通过调用ClassTag来获取运行时类。最终解决方案可能如下所示:

runtimeClass