使用反射获取在Scala中实现特征的所有类
发布时间:2020-12-16 19:16:24 所属栏目:安全 来源:网络整理
导读:我想列出实现特定特征的所有案例类.我目前正在使用 Clapper ClassUtil这样做.我能够获得直接实现特征的案例类.但是,我无法获得其他没有直接实现特征的类.如何获得直接或间接实现特征的所有类. ? val finder = ClassFinder()finder.getClasses().filter(_.is
我想列出实现特定特征的所有案例类.我目前正在使用
Clapper ClassUtil这样做.我能够获得直接实现特征的案例类.但是,我无法获得其他没有直接实现特征的类.如何获得直接或间接实现特征的所有类. ?
val finder = ClassFinder() finder.getClasses().filter(_.isConcrete).filter(_.implements("com.myapp.MyTrait")) Scala版本:2.11 Clapper Class Util版本:1.0.6 有没有其他方法可以获得这些信息?有人能指出我正确的方向吗? EDIT: 样本特征和用法: trait BaseEntity trait NamedEntity{ val name:String} trait MasterDataEntity extends NamedEntity case class Department(id:Long,override val name:String) extends MasterDataEntity case class Employee(id:Long,name:String) extends BaseEntity case class User(id:Long,override val name:String) extends NamedEntity 现在,如果我将特征赋予NamedEntity,我应该能够同时获得Department和User,因为它们都直接或间接地实现了NamedEntity.使用implements方法,它只给User.我也试过使用接口方法,它也只提供直接超类. 解决方法
看看
source code,问题似乎是它不遵循接口层次结构.如果您这样做,您会找到所有实例:
package foo import java.io.File import org.clapper.classutil.{ClassFinder,ClassInfo} object Main extends App { val jar = new File("target/scala-2.11/class_test_2.11-0.1.0.jar") val finder = ClassFinder(jar :: Nil) val classes = ClassFinder.classInfoMap(finder.getClasses().iterator) val impl = find("foo.NamedEntity",classes) impl.foreach(println) def find(ancestor: String,classes: Map[String,ClassInfo]): List[ClassInfo] = classes.get(ancestor).fold(List.empty[ClassInfo]) { ancestorInfo => val ancestorName = ancestorInfo.name def compare(info: ClassInfo): Boolean = info.name == ancestorName || (info.superClassName :: info.interfaces).exists { n => classes.get(n).exists(compare) } val it = classes.valuesIterator it.filter { info => info.isConcrete && compare(info) } .toList } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- angular + bootstrap
- scala – 如何通过Nexus强制下载SBT插件和插件?
- axis2实现WebService之用POJO实现0配置的WebService
- AngularJS的学习--ng-show/ng-hide/ng-if和ng-switch
- Bootstrap3.0学习第五轮(表格)
- 带有else块的Angular 2 – * ngIf给我“无法绑定到’ngIfEl
- 如何使用自定义键在VIM中启动可视块选择
- AXIS实现WebService
- Couldn't register ***.**** with the bootstrap serve
- 使用Powershell访问IIS日志?
推荐文章
站长推荐
- angularjs – ui-bootstrap-tpls加载模板失败
- angular – 无法将浏览器连接到Karma服务器(永久
- scala – 在Play Framework 2.2.1上安装Deadbolt
- 使用.NET向webService传double、int、DateTime 服
- Bootstrap V3.0 Ajax无刷新分页的实现 附代码
- bootstrap 下拉菜单
- unix – 使箭头和删除键工作在KornShell命令行
- Bootstrap Multiselect 动态二联赋值 支持多选
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按
- Access-Control-Allow-Origin angularjs到php
热点阅读