Scala:在伴侣对象中获取伴侣类
发布时间:2020-12-16 18:20:12 所属栏目:安全 来源:网络整理
导读:我需要在我的伴侣对象中定义一个val,它用一个以伴侣类作为参数的方法初始化. 我想用特征处理这个问题,不要重复自己.我的问题是,X.getClass与classOf [X]不同.第一个是伴随对象的类,第二个是伴侣类的类,但我需要获取伴侣类而不直接对其进行硬编码. 基本上我需
我需要在我的伴侣对象中定义一个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]; 问题是由于类型擦除,我无法获得泛型类 解决方法
您的代码中存在几个问题.首先,正如您已经说过的,类型将被删除,第二个对象(对象FooCompanionObject [f<:Foo])不采用类型参数,第三,对象无法扩展(对象Bar扩展FooCompanionObject).要做你想做的事,你必须为你的伴侣对象创建一个抽象基类,它接受一个类型参数,如果你愿意,它可以被约束到一个特定的类型,并且必须在ClassTag上进行上下文绑定.然后,您可以通过在ClassTag上调用runtimeClass来获取运行时类.最终解决方案可能如下所示:
import scala.reflect.ClassTag import scala.reflect.classTag trait Foo abstract class Companion[A <: Foo : ClassTag] { val fClazz = classTag[A].runtimeClass } class Bar extends Foo object Bar extends Companion[Bar] scala> Bar.fClazz res2: Class[_] = class Bar (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |