带参数化类型的Scala反射
发布时间:2020-12-16 18:35:06 所属栏目:安全 来源:网络整理
导读:我编写了以下函数来检查给定的单例类是否实现了特征. /** Given a singleton class,returns singleton object if cls implements T. * Else returns None. */ def maybeMakeSingletonObj[T: ClassManifest](cls: Class[_]): Option[T] = { try { val m = cla
我编写了以下函数来检查给定的单例类是否实现了特征.
/** Given a singleton class,returns singleton object if cls implements T. * Else returns None. */ def maybeMakeSingletonObj[T: ClassManifest](cls: Class[_]): Option[T] = { try { val m = classManifest[T] val obj = cls.getField("MODULE$").get(m.erasure).asInstanceOf[AnyRef] if (Manifest.singleType(obj) <:< m) Some(obj.asInstanceOf[T]) else None } catch { case e: Exception => None } } 此代码适用于以下示例: trait A object B extends A assert(maybeMakeSingletonObj[A](B.getClass()) === Some(B)) 但是,在以下示例中失败: trait A[T,R] object B extends A[Int,Int] assert(maybeMakeSingletonObj[A[_,_]](B.getClass()) === Some(B)) 有任何想法吗? 解决方法
从
ScalaDoc开始:“类型关系运算符<:<和=:=应仅被视为近似值,因为类型一致性的许多方面尚未在清单中充分表示.”显然,这是一个这样的情况.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- scala – 如何利用Play2.1框架中的SLF4J varargs登录?
- angular2 – 在RxJs 5中共享Angular 2 Http网络调用的结果的
- PowerShell异步计时器事件不在测试控制台之外工作
- Angular 2:错误TS2307:找不到模块’socket.io-client’
- angularjs – 如何使用Jasmine监视Angular承诺链
- WebService中文件传输
- 使用新线条在Scala Play20中使用BodyParser解析文件
- 从docker容器连接到mysql数据库
- [译]AngularJS 1.3.0 开发者指南(二) -- 概念综述
- scala – 操纵元组