反射选择器表达式

Java :: Geci是在单元测试期间运行的代码生成器。 如果生成的代码适合源代码的实际版本,则测试不会失败。 如果需要进行任何修改,则测试会修改源代码并失败。 例如,有一个新的字段需要一个setter和getter,然后访问器生成器将生成新的setter和getter,然后失败。 如果没有新字段,那么生成的代码就是已经存在的代码,没有理由触摸源代码:启动生成器的测试成功完成。

因为Java :: Geci生成器在运行时作为测试运行,并且因为它们需要访问为其生成代码的Java代码结构,所以Java反射是这些生成器的关键。

为了帮助代码生成器执行任务, javageci-tools模块中提供了许多支持方法。

 com.javax0.geci  javageci-tools  1.1.1 

在本文中,我将在此模块中编写一个类: Selector ,可以帮助您基于逻辑表达式选择字段,方法或类。

介绍

javax0.geci.tools.reflection.Selector有点像正则表达式类Pattern 。 您可以创建一个调用静态方法compile(String expression)的实例。 在实例上,您可以调用match(Object x) ,其中x对象可以是FieldMethodClass ,也可以是任何这些对象的类型(我们将其称为CFoM)。 如果x符合已编译的表达式,则match()方法将返回true

选择器表达式

该表达式是一个Java字符串。 可以与任何CFoM匹配的简单至true 。 同样, false将不匹配任何内容。 到目前为止,微不足道。 表达式可以包含其他条件。 publicprivate volatile等可以用于匹配具有任何修饰符的CFoM。 如果您在CFoM上使用诸如volatile的东西而不能是volatile(类或方法),则将得到IllegalArgumentException。

对于课程,您可以具有以下条件:

  • interface当类是接口
  • primitive时,它是一个基本类型
  • annotation时为注释
  • anonymous
  • array
  • enum
  • member
  • local

也许您可能会查找成员类和本地类。 学习一点Java永远不会太晚。 在开发此工具之前,我不知道有可能查询一个类是本地类。

这些条件很简单。 您也可以使用模式匹配。 如果编写extends ~ /regex/ ,它将仅匹配扩展名称与正则表达式regex匹配的类的类。 您还可以将namesimpleNamecanonicalName与正则表达式进行匹配。 如果我们的CFoM x是一个方法或字段,则检查返回类型,除非是name因为它们也有一个名字。

条件

有许多条件可以使用,这里我只列出一个子集。 包含所有单词的详细文档位于https://github.com/verhas/javageci/blob/master/FILTER_EXPRESSIONS.md

这是一个开胃菜:

protectedpackagestaticpublicfinalsynthetic
synchronizednativestrictdefaultvarargimplements
overridesvoidtransientvolatileabstract

表达结构

检查一件事情不会有太大帮助。 并且还将方法compile()的参数称为“表达式”表明存在更多内容。

您可以将条件组合成完整的逻辑表达式。 您可以创建一个选择器Selector.compile("final | volatile")来匹配所有线程安全的字段,这些字段可以是finalvolatile或两者都是(在Java中是不可能的,但是选择器表达式不会在意)。 您还可以说Selector.compile("public & final & static")以仅匹配那些publicfinalstatic字段。 或者,您可以Selector.compile("!public & final & static")来匹配finalstatic字段,这些字段是privateprotected或package private,也称为“ not public”。 您还可以应用括号,并使用括号来构建相当复杂的逻辑表达式。

采用

该用法可以是任何严重依赖反射的应用程序。 在Java :: Geci中,该表达式可以在任何为该方法或某个类的字段生成某些代码的生成filter参数中使用。 在这种情况下, filter可以选择需要代码生成的字段或方法。 例如,在访问器生成filter的情况下, filter的默认值为true :为所有字段生成设置器和获取器。 如果只需要专用字段的设置方法和获取方法,则可以指定filter="private" 。 如果您还想排除最终字段,则可以编写`filter =”!final&private”。 在这种情况下,您将无法获得最终字段的吸气剂。 (默认情况下根本不会为最终字段生成设置程序。生成器很聪明。)

使用流,非常容易编写表达式,例如

 Arrays.stream(TestSelector.class.getDeclaredFields())  .filter(Selector.compile( "private & primitive" .filter(Selector.compile( "private & primitive" )::match)  .collect(Collectors.toSet()); 

它将返回私有和原始的字段集。 请注意,在这种情况下,您会有一些选择器编译开销(尽管对于流而言只有一次),并且在某些情况下,性能可能不可接受。

实验一下,看看它是否适合您的需求。

我只是忘了补充:您还可以在运行时调用selector(String,Function)和/或selectorRe(String,Function)方法来扩展选择器。

翻译自: https://www.javacodegeeks.com/2019/06/reflection-selector-expression.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光纤收发器不同品牌之间的兼容性互通

目前市面上的光纤收发器品牌跟厂家是愈来愈多,光纤收发器厂家和品牌大部分方案是百兆RTL8306E,IP113C,千兆高通8334,Marvell6122,这几个方案之间的兼容性都不错,可实现互联互通,传输稳定&#x…

[渝粤教育] 沈阳工业大学 模拟电子技术 参考 资料

教育 -模拟电子技术-章节资料考试资料-沈阳工业大学【】 第一周作业 第一周单元测验 1、【单选题】在本征半导体中加入( )元素可形成N型半导体。 A、五价 B、四价 C、三价 D、二价 参考资料【 】 2、【单选题】PN结加正向电压时,空间电荷区将…

[渝粤教育] 深圳信息职业技术学院 《新理念英语》English For You 参考 资料

教育 -《新理念英语》English For You-章节资料考试资料-深圳信息职业技术学院【】 Which is true about the introduction? 1、【多选题】Which of the following is true about the introduction? (多选) A、The employers we talked to told us that they valued employee…

光纤收发器在高清网络视频监控工程项目中的应用

光纤收发器是一种将以太网的电信号和光信号进行互换的以太网传输媒质转换设备,也被称之为光电转换器。而在网络上传输数据的光纤分为多模光纤和单模光纤。接下来我们就来看下什么是单模光纤收发器,什么是多模光纤收发器,了解下光纤收发器在高…

[渝粤教育] 潍坊职业学院 花卉栽培 参考 资料

教育 -花卉栽培-章节资料考试资料-潍坊职业学院【】 庭院常用花卉栽培技术—单元作业 庭院常用花卉栽培技术—单元测验 1、【单选题】属于二年生花卉的是( )。 A、万寿菊 B、波斯菊 C、百日菊 D、羽衣甘蓝 参考资料【 】 2、【单选题】在北方寒冷地区冬天…

[渝粤教育] 盐城师范学院 高等代数 参考 资料

教育 -高等代数-章节资料考试资料-盐城师范学院【】 5.1练习 1、【单选题】 A、 B、 C、 D、以上都不对 参考资料【 】 2、【单选题】 A、 B、 C、 D、 参考资料【 】 3、【单选题】 A、 B、 C、 D、 参考资料【 】 4、【单选题】设有矩阵A,与其合同的是 A、 B、 C、…

Java中的策略设计模式

策略设计模式是一种行为模式,其中我们有多种算法/策略来完成一项任务,所使用的算法/策略留给客户选择。 各种算法选项封装在单独的类中。 在本教程中,我们将学习在Java中实现策略设计模式。 UML表示形式: 首先,我们来…

光纤收发器怎么连?光纤收发器连接图解!

光纤收发器可以实现光信号和电信号的转换,通过光纤进行信号的转换,最后和一些设备连接,让你的传输通信畅通无阻。当我们远距离传输时,通常会使用光纤来传输。因为光纤的传输距离很远,一般来说单模光纤的传输距离在10千…

[渝粤教育] 莆田学院 电机与拖动基础(一) 参考 资料

教育 -电机与拖动基础(一)-章节资料考试资料-莆田学院【】 绪论节测试 1、【单选题】电机的基本原理就是基于( ),实现机电能量转换。 A、牛顿三大定律 B、电磁感应 C、质量守恒 D、洛伦兹力定律 参考资料【 】 2、【单…

光纤收发器的六个指示灯代表是什么意思?

对光纤收发器这块了解的朋友应该知道,光纤收发器有6个LED指示灯,它们分别显示了收发器的工作状态,根据LED所示,我们就能判断出收发器是否工作正常和可能有什么问题,从而能帮助找出故障。那么,光纤收发器的六…

[渝粤教育] 西北工业大学 模拟电子技术基础 参考 资料

教育 -模拟电子技术基础-章节资料考试资料-西北工业大学【】 常用半导体器件原理 1、【单选题】N型半导体是在纯净半导体中掺入____; A、带正电的离子 B、三价元素,如硼等 C、五价元素,如磷等 D、带负电的电子 参考资料【 】 2、【单选题】用…

[渝粤教育] 西南交通大学 大学生的智慧篮球 参考 资料

教育 -大学生的智慧篮球-章节资料考试资料-西南交通大学【】 篮球脚步移动技术章节测试 1、【单选题】移动技术的优劣在一定程度上反映了一名篮球运动员的技术水平,移动技术的核心是对( )的控制和对身体平衡的维持。 A、身体素质 B、身体重心…

光纤收发器注意事项

光纤收发器的产品种类有很多种,每一种所对应的的端口,光纤接头也是有所不同的,我们在实际实际使用中大多注意的是按光纤接头不同而区分的类别:SC接头光纤收发器和FC/ST接头光纤收发器。那么,我们平时在使用光纤收发器的…

[渝粤教育] 西南石油大学 数据库原理及应用 参考 资料

教育 -数据库原理及应用-章节资料考试资料-西南石油大学【】 SPOC—第1章 单元测验 1、【单选题】DB、DBMS和DBS三者之间的关系是( )。 A、DB包括DBMS和DBS B、DBS包括DB和DBMS C、DBMS包括DB和DBS D、不能相互包括 参考资料【 】 2、【单选题】数据库的…

activemq网络桥接_ActiveMQ –经纪人网络解释

activemq网络桥接目的 这个由7部分组成的博客系列将分享有关如何创建ActiveMQ代理网络以实现高可用性和可伸缩性的信息。 为什么要建立经纪人网络? ActiveMQ消息代理是企业中消息传递基础结构的核心组件。 它需要高度可用并且可以动态伸缩,以促进具有不…

[渝粤教育] 西安交通大学 土力学 参考 资料

教育 -土力学-章节资料考试资料-西安交通大学【】 作业题 章测题 1、【多选题】下列哪些工程问题与岩土工程密切相关() A、基坑开挖 B、公路路基 C、浇筑楼层 D、钢结构设计 参考资料【 】 2、【判断题】通常把在土木工程建设中涉及岩石、土、地下水中的…

迷你型MINI光纤收发器的优势有哪些?

现如今,在互联网盛行的今天,我们平时所使用的网络都离不开收发器的作用,收发器有很多种,随着对网络容量的需求急剧增大,收发器由POE收发器衍生出非网管型、网管型以及迷你型等光纤收发器,接下来飞畅科技的小…

[渝粤教育] 西安理工大学 人工智能导论 参考 资料

教育 -人工智能导论-章节资料考试资料-西安理工大学【】 第一讲 人工智能概述单元测试 1、【单选题】人工智能中通常把( )作为衡量机器智能的准则。 A、图灵机 B、图灵测试 C、中文屋思想实验 D、人类智能 参考资料【 】 2、【单选题】人工智能的目的是让…

JDK 14的征兆开始出现

JDK 13当前处于Rampdown第一阶段 (RDP 1),计划在一周多一点的时间(2019年7月18日)进入Rampdown第二阶段 (RDP 2),并且暂定于2019年9月17日正式上市。当然,这意味着是时候…

[渝粤教育] 郑州大学 互联网国际政治学 参考 资料

教育 -互联网国际政治学-章节资料考试资料-郑州大学【】 第一章 单元测验 1、【单选题】( )年,中国接入国际互联网,这是中国互联网发展史上具有里程碑意义的一天,标志着中国正式成为国际互联网的一员。 A、1994 B、198…