微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Scala反射能否为您提供在类中定义的类型别名的列表?

如何解决Scala反射能否为您提供在类中定义的类型别名的列表?

我面临的情况是我需要通过名称实例化一个类,但是该类实际上是在对象(实际上是包对象)中定义的scala类型别名。我已经弄清了很多我需要的东西,但是我找不到一种自省对象以获取类型别名的方法

具体地说,我有字符串“ Foo.MyString”,我想根据以下定义实例化该实例。

object Foo {
   type MyString = String
}

我可以使用runtimeMirror.staticModule获取符号,然后使用runtimeMirror.reflectModule,但是我找不到任何方法来解析类型别名“ MyString”。

获取Foo的方法或字段,我可以使用module.instance.getClass进行Java自省,但是Java显然无法获取类型别名。

我也尝试过使用符号,但这只是让您获得符号的所有者,而不是“拥有的”符号。

解决方法

尝试

typeOf[Foo.type].decl(TypeName("MyString")).asType.toType.dealias // String
typeOf[Foo.type].decl(TypeName("MyString")).typeSignature.dealias // String

val moduleSymbol = runtimeMirror.staticModule("pckg.App.Foo")
moduleSymbol.typeSignature.decl(TypeName("MyString")).asType.toType.dealias // String
moduleSymbol.typeSignature.decl(TypeName("MyString")).typeSignature.dealias // String

有关所有类型成员的列表,请参见.decls,而不是单个.decl(...)。您可以过滤列表

typeOf[Foo.type].decls.filter(_.isType)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。