当前位置: 首页 > news >正文

学校网站建设具体分工crm管理系统排名

学校网站建设具体分工,crm管理系统排名,网络架构分析,手机网站开发教程pdf在本文中#xff0c;我将描述如何使用Java :: Geci生成器Repeated以克服泛型不能为原始类型的Java语言不足。 该示例是对Apache Commons Lang库的建议扩展。 介绍 当您复制粘贴代码时#xff0c;您做错了什么。 至少那是感知。 您必须创建更通用的代码结构#xff0c;以便可… 在本文中我将描述如何使用Java :: Geci生成器Repeated以克服泛型不能为原始类型的Java语言不足。 该示例是对Apache Commons Lang库的建议扩展。 介绍 当您复制粘贴代码时您做错了什么。 至少那是感知。 您必须创建更通用的代码结构以便可以多次使用不同的参数而不是类似的代码。 这并非总是如此。 有时您必须重复一些代码因为您使用的语言尚不支持该问题所需的功能。 这太抽象了。 让我们看一个特定的示例以及如何使用在Java :: Geci框架中运行的Repeated源生成器来管理它。 问题 Apache Commons Lang库中的org.apache.commons.lang3.Functions类定义了一个内部接口FailableFunction 。 这是一个通用接口定义为 FunctionalInterface public interface FailableFunctionI, O, T extends Throwable { /** * Apply the function. * param pInput the input for the function * return the result of the function * throws T if the function fails */ O apply(I pInput) throws T; } 这本质上与FunctionI,O 后者将I转换为O但是由于接口是有故障的因此它也可能引发类型T的异常。 新的需要是 public interface FailableIFunctionO, T extends Throwable 每个I原语值的面。 问题是泛型在Java中还不能是原始的因此我们应该为每种原始类型分离接口例如 FunctionalInterface public interface FailableCharFunctionO, T extends Throwable { O apply( char pInput) throws T; } FunctionalInterface public interface FailableByteFunctionO, T extends Throwable { O apply( byte pInput) throws T; } FunctionalInterface public interface FailableShortFunctionO, T extends Throwable { O apply( short pInput) throws T; } FunctionalInterface public interface FailableIntFunctionO, T extends Throwable { O apply( int pInput) throws T; } ... and so on ... 这是许多非常相似的方法可以很容易地由模板描述然后由某些代码生成工具生成。 使用Java :: Geci进行模板处理 Java :: Geci框架附带了许多现成的生成器。 其中之一是功能强大的Repeated生成器正是出于这个目的。 如果必须重复使用可能的参数的代码则可以定义模板值和Repeated将生成解析模板参数的代码。 向POM添加依赖项 我们要做的第一件事是将Java :: Geci依赖项添加到pom.xml文件中。 由于Apache Commons Language仍基于Java 8因此我们必须使用Java :: Geci 1.2.0的Java 8反向端口 dependency groupId com.javax1.geci/ groupId artifactId javageci-core/ artifactId version 1.2.0/ version scope test/ scope / dependency 注意依赖项的范围是test 。 Repeated生成器可以方便地使用而字节码中不会保留任何Geci注释因此它们是编译时的依赖项。 实际上所有生成器都可以使用而无需注释因此不需要任何编译依赖关系而这对于生产来说是额外的依赖关系。 在Repeated的情况下这甚至很容易做到。 运行发电机的单元测试 我们要做的第二件事是创建一个将执行生成器的单元测试。 Java :: Geci生成器在单元测试阶段运行因此它们可以使用反射以及实际的源代码访问已编译的代码。 如果生成的任何代码与源文件中已有的代码不同则测试将失败并且应再次执行生成过程。 由于发生器是应该幂等的因此测试第二次不应失败。 以我的经验很遗憾此工作流程会影响开发人员的行为。 运行测试/失败再次运行 这是一个糟糕的循环。 有时我碰巧发现自己不是在代码生成器发生故障的情况下重新执行单元测试。 但是这就是Java :: Geci的工作方式。 有一些关于Java :: Geci工作流程的文章 您的代码是多余的请继续使用 保持JavaDoc为最新 将对象转换为映射并返回 反射选择器表达式 使用Java :: Geci生成Getter和Setters 创建一个Java :: Geci生成器 如何生成源代码 因此在此我不会重复总体架构及其工作流程。 单元测试如下 Test void generatePrimitiveFailables() throws Exception { final Geci geci new Geci(); Assertions.assertFalse(geci.source(Source.maven().mainSource()) .only( Functions ) .register(Repeated.builder() .values( char,byte,short,int,long,float,double,boolean ) .selector( repeated ) .define((ctx, s) - ctx.segment().param( Value , CaseTools.ucase(s))) .build()) .generate(), geci.failed()); } 调用source() register()和only()配置框架。 此配置告诉框架使用项目主Java src目录中的源文件并仅使用文件名Functions 。 在我们调用generate()开始代码生成之前对register()的调用会register() Repeated生成器实例。 生成器实例本身是使用内置的生成器创建的该生成器使我们可以配置生成器。 在这种情况下对values()的调用定义了我们要重复使用模板的逗号分隔的值列表稍后在注释中的代码中定义。 对selector()的调用定义了此代码重复代码的标识符。 单个源文件可能包含多个模板。 每个模板可以使用不同的值列表进行处理结果将插入到不同的输出段中并插入源文件中。 在这种情况下仍然只有一个这样的代码生成模板它必须用一个名称标识并且该名称也必须在editor-fold部分中使用该部分是生成代码的占位符。 实际使用生成器的名称有两个作用。 其一是它标识了编辑器折叠段和模板。 另一个是框架将看到带有该标识符的编辑器折叠段并且它将识别出该源文件需要该生成器的注意。 另一种可能性是在类中添加Repeated或Geci(repeated)批注。 如果标识符是别的东西并且不repeated那么生成器“ Repeated将不会触及源代码或者我们需要将另一个段标识为“ repeated 除了触发生成器之外它实际上不会被使用。 对define()的调用define()了一个BiConsumer 该BiConsumer获取了上下文引用和实际值。 在这种情况下 BiConsumer计算大写值并将其放入与名称Value相关联的实际细分参数集中。 默认情况下实际值与名称value关联并且传递给方法define()的BiConsumer可以定义和注册其他参数。 在这种情况下它将添加新值 value Value char -- Char byte -- Byte short -- Short int -- Int long -- Long float -- Float double -- Double boolean -- Boolean 源代码 第三件事是在源文件中准备模板和输出段。 输出段的准备非常简单。 它只是一个编辑器折叠 //editor-fold idrepeated ///editor-fold 生成的代码将自动插入两行之间并且编辑器EclipseIntelliJ或NetBeans将允许您关闭折叠。 您不想编辑此代码它已生成。 该模板将如下所示 /* TEMPLATE repeated FunctionalInterface public interface Failable{{Value}}FunctionO, T extends Throwable { O apply({{value}} pInput) throws T; } */ 代码生成器找到模板的开始以查找与/* TEMPLATE name格式匹配的行并收集连续的行直到注释的结尾。 该模板使用小胡子模板的占位符格式即用双括号括起来的值的名称。 双括号在Java中很少见。 当我们运行单元测试时它将生成我在本文开头已经列出的代码。 然后它当然会失败修改了源代码然后再次编译。 摘要和总结 最重要的要点和警告源代码生成是旨在弥补编程语言不足的一种工具。 不要使用代码生成来修正语言的不足而不仅仅是语言的不足技能或知识的不足。 生成代码的简单方法不是生成不必要的冗余代码的借口。 另一个收获是在Java中使用此生成器非常容易。 该功能可以与Java所没有的C预处理器相媲美而且效果良好。 需要时使用它。 即使依赖项的设置和单元测试的开销可能很小但可维护性通常会偿还此成本。 翻译自: https://www.javacodegeeks.com/2019/09/handling-repeated-code-automatically.html
http://www.zqtcl.cn/news/506198/

相关文章:

  • 湖南网站开发企业excel网站建设
  • 安康网站建设技巧腾讯建设网站视频下载
  • 如何能让企业做网站的打算中企动力做网站贵吗
  • wordpress 空间常州seo
  • 网站负责人备案采集照具体要求湛江网吧
  • 长春建站模板制作php网站空间购买
  • 网站域名到期怎么办食品包装设计的介绍
  • 建设网站专栏台州cms模板建站
  • 网站建设套餐方案湛江网站如何制作
  • wordpress网站怎么打开西安企业做网站多少钱
  • 电子商务网站建设的实训报告网页美工设计夏霍
  • 在一呼百应上做网站行吗江西省住房和城乡建设厅的网站
  • 对百度网站进行分析山水人家装饰公司
  • 接网站开发广州仿站定制模板建站
  • 资源网站源码下载制作软件的app有哪些
  • 免备案空间网站电子商务网站经营特色分析的主要内容包括
  • 遨游建站网站设计的基本知识
  • 延津县建设局网站景安网站上传完还要怎么做
  • 模板做网站达州住房和城乡建设部网站
  • 高端网站定做公司企业文化模板
  • iis7.5添加网站销售订单管理系统
  • 网站开发模板代码外贸流程知识
  • 免费网站有哪些邯郸去哪做网站改版
  • 商务网站开发的工作任务湖南专业网站建设
  • 怎样搭建免费网站什么网站做网页好
  • flash工作室网站模板天津seo培训班在哪里
  • 怎么做游戏推广网站扬中商城官网
  • html5 公众号 网站开发顺德手机网站建设
  • 上海医疗网站备案表千库网是什么
  • 陕西省西安市制作网站二次元 wordpress主题