oracle密码不能重复用

介绍

在我们的Java应用程序中复制/粘贴代码通常不好,但是有时这是不可避免的。 例如,项目License3j在Feature类中为其支持的每种XXX类型提供了一个isXXX方法。 在这种情况下,我们做不到写

 public boolean isBinary() { return type == Type.BINARY; } public boolean isString() { return type == Type.STRING; } public boolean isByte() { return type == Type.BYTE; } public boolean isShort() { return type == Type.SHORT; }  and so on 

应用程序支持的每种功能类型。 那里有一些类型:Binary,String,Byte,Short,Int,Long,Float,Double,BigInteger,BigDecimal,Date,UUID。 键入所有非常相似的方法不仅是无聊的任务,而且容易出错。 很少有人擅长执行此类重复性任务。 为了避免这种情况,我们可以使用Java :: Geci框架,作为最简单的解决方案,我们可以使用生成器Iterate。

POM依赖

要使用生成器,我们必须添加依赖项

 < dependency > < groupId >com.javax0.geci</ groupId > < artifactId >javageci-core</ artifactId > < scope >test</ scope > < version >1.4.0</ version >  </ dependency > 

该库仅在测试运行期间执行,因此使用它并不意味着任何额外的依赖关系。 谁想要使用许可证3j库都不需要使用Java :: Geci。 这只是test范围中使用的开发工具。

运行它的单元测试

依赖关系不会自行运行。 毕竟,依赖不是程序。 它是打包到JAR中的一堆类文件,可在类路径上使用。 我们必须执行生成器,并且必须通过创建单元测试的框架来完成:

 @Test @DisplayName ( "run Iterate on the sources" ) void runIterate() throws IOException { Geci geci = new Geci(); Assertions.assertFalse( geci.register(Iterate.builder() .define(ctx -> ctx.segment().param( "TYPE" , ctx.segment().getParam( "Type" ).orElse( "" ).toUpperCase())) .build()) .generate() , geci.failed() ); } 

它创建一个Geci对象,使用生成器实例Geci ,然后在已配置的框架Geci对象上调用generate() 。 就目前而言, define()调用似乎有点神秘。 稍后我们将阐明这一点。

源代码准备

执行构建之前的最后一步是定义模板以及要插入模板的值。 无需编写所有方法,而是编写模板和编辑器折叠段:

 /* TEMPLATE LOOP Type=Binary|String|Byte|Short|Int|Long|Float|Double|BigInteger|BigDecimal|Date|UUID public boolean is{{Type}}() { return type == Type.{{TYPE}}; } */ //<editor-fold id="iterate"> //</editor-fold> 

当我们通过框架执行生成器时,它将为占位符Type每个值评估模板,并将每个{{Type}}替换为实际值。 生成的代码将插入id “ iterate”的编辑器折叠段中。

查看模板,您会发现有一个占位符{{TYPE}} ,未在列表中定义。 这是统一测试define()进入图片的地方。 它定义了一个使用上下文的使用者,并使用该上下文读取Type的实际值,创建该值的大写版本并将其分配给名为TYPE的段参数。

通常就是这样。 使用生成器还有其他功能,例如在每次迭代中定义分配给不同占位符的多个值,转义或跳过行等。 关于这些内容的摘录是您可以阅读文档的摘录,您可以阅读最新且完整的内容https://github.com/verhas/javageci/blob/master/ITERATE.adoc

文件摘录

在要使用生成器的Java源文件中,必须使用注释@Geci("iterate")来注释该类。
您也可以改用@Iterate批注,该批注在
javageci-core-annotations模块。 这将指示Geci框架您要在给定类中使用iterate生成器。

TEMPLATE

模板在/\*TEMPLATETEMPLATE行之后开始。
/*和单词之间前后可以有空格
TEMPLATE但线上不应有其他任何东西。 当生成器看到这样的行时,它将开始收集以下行作为模板的内容。

模板的末尾由一行上带有*/信号线表示,没有其他内容(空格除外)。

模板的内容可以包含{{}}之间的参数
字符,与小胡子模板程序使用的字符类似。
(生成器不使用胡须,模板处理更为简单。)

LOOP

在收集模板的行时,某些行被识别为模板的参数定义。 这些行不会进入模板的主干。 (这些行上的命令名称始终为大写。)

如您在简介中所见

 LOOP type =int|long|short 

不是模板文本的一部分。 它通过类型指示发生器迭代并设置参数{{type}}在文本到int第一, long第二和short的最后。 这样,您可以遍历单个参数的多个值。

更复杂的模板可能需要多个参数。 在这种情况下,您可以将它们在LOOP行中列出为

 LOOP type ,var=int,aInt|long,aLong|short,aShort 

这将告诉生成器将参数设置{{type}}相同的方式,前三个迭代,但同时也设置了参数{{var}}aInt在第一循环中,以aLong在第二循环中和最后一个循环中的aShort

如果值列表太长,则可以将列表分成多条LOOP行。 但是,在这种情况下,必须在第二行,第三行等在LOOP行中重复这些变量。
它们的顺序可能不同,但是如果某些LOOP行中存在未定义的变量,则将解析引用该变量的占位符,并将其保留为{{placeholder}}形式。

上面的例子也可以写成

 LOOP type ,var=int,aInt LOOP var, type =aLong,long LOOP type ,var=short,aShort 

并得出与上述LOOP相同的值:

 LOOP type ,var=int,aInt|long,aLong|short,aShort 

默认

从文件的开头到结尾处理模板,并按此顺序准备生成的代码。
生成的代码的内容将直接插入模板editor-foldeditor-fold段中。 虽然这样的id
editor-fold段并不是很有趣,您必须为每个段指定一个唯一的id 。 这是Java :: Geci框架的限制。

进阶使用

EDITOR-FOLD-ID

您可能会遇到多个模板,这些模板遍历不同的值,并且您希望结果进入相同的editor-fold
分割。 可以使用EDITOR_FOLD_ID

在下面的例子中

 package javax0.geci.iterate.sutclasses;  public class IterateOverMultipleValues { /* TEMPLATE {{ type }} get_{{ type }}Value(){ {{ type }} {{variable}} = 0; return {{variable}}; } LOOP type ,variable=int,i|long,l|short,s EDITOR-FOLD-ID getters */ // // nothing gets here // // int get_intValue(){ int i = 0; return i; } long get_longValue(){ long l = 0; return l; } short get_shortValue(){ short s = 0; return s; } //  } 

生成的代码进入具有id名称的editor-fold
getters即使这不是遵循模板定义的getters

使用此功能可以将生成的代码从多个迭代模板发送到单个段中。 通常,将模板和段保持在一起是一个好习惯。

ESCAPESKIP

模板的结尾由*/ 。 这实质上是评论的结尾。 如果要在模板中包含注释(如JavaDoc),会发生什么情况。 您可以在注释行的末尾添加*/字符,但其中仍包含一些字符。 该解决方案不是很好,它实际上是一种解决方法。

要有一条完全是注释结尾的行,或者是任何可以由模板处理解释的行,例如LOOP行,您应该在前一行中有一行,其中只包含ESCAPE 。 这将告诉模板处理将下一行包括在模板文本中,并在此后的行继续进行正常处理。

同样,您可以使用SKIP行来完全忽略以下行。
使用这两个命令,您可以将任何内容包括到模板中。

一个示例显示了如何将JavaDoc注释包括到模板中:

 package javax0.geci.iterate.sutclasses;  public class SkippedLines { /* TEMPLATE /** * A simple zero getter serving as a test example * @ return zero in the type {{ type }} ESCAPE */ // SKIP /* {{ type }} get_{{ type }}Value(){ {{ type }} {{variable}} = 0; return {{variable}}; } LOOP type ,variable=int,i|long,l|short,s EDITOR-FOLD-ID getters */ // /** * A simple zero getter serving as a test example * @ return zero in the type int */ int get_intValue(){ int i = 0; return i; } /** * A simple zero getter serving as a test example * @ return zero in the type long */ long get_longValue(){ long l = 0; return l; } /** * A simple zero getter serving as a test example * @ return zero in the type short */ short get_shortValue(){ short s = 0; return s; } //  } 

模板以注释开头,并且注释实际上可以包含任何其他开头的注释。 Java注释不嵌套。 模板的末尾是包含*/字符串的行。 我们希望该行成为模板的一部分,因此我们在该行之前
ESCAPE因此它不会被解释为模板的末尾。 另一方面,对于Java,这将结束注释。 要继续模板,我们必须“返回”注释模式,因为我们不希望Java编译器将模板作为代码来处理。 (最后但并非最不重要的一点是,因为使用占位符的模板可能不是语法上正确的Java代码片段。)我们需要一个新的/*行,我们不想进入模板。
因此,此行之前包含// SKIP的行。 (跳过行在命令前可以具有// 。)

您可以在生成的代码中看到的结果。 所有方法都具有正确的JavaDoc文档。

SEP1SEP2

遍历值已与占位符的名字分开,并且| 值列表。 例如,上面的示例包含

 LOOP type ,variable=int,i|long,l|short,s 

两个占位符名称typevariable ,每个占位符三个值。
占位符不需要包含特殊字符,如果它们是标准标识符,则最好。 但是,这些值可能包含逗号或竖线。 在这种情况下,你可以重新定义字符串(不仅是单个字符),模板LOOP命令可以改用单一字符串,|

例如线

 SEP1 / 

表示名称和值应以/分隔,而不是一个和

 SEP2 & 

的值的列表应当由一个字符分隔&
串。 SEP1SEP2仅在它们之前
LOOP命令,它们仅对所使用的模板有效。遵循上述命令, LOOP示例将如下所示:

 LOOP type /variable =int /i &long /l &short /s 

这样,没有什么可以阻止我们添加另一个值列表

 LOOP type /variable =int /i &long /l &short /s &byte,int /z 

最终将导致示例模板出现语法错误,但演示了重新定义名称和值列表分隔符的要点。

组态

生成器由Geci框架支持的配置工具实现,并且所有参数都是可配置的。 您可以在创建注释器的单元测试中,类的注释中或在编辑器折叠参数中,重新定义与模板的开始,结束,跳过等行匹配的正则表达式。

带走

迭代生成器是一种非常易于使用的生成器,用于创建重复的代码。 这也是主要的危险:您应该足够强大才能找到更好的解决方案,并仅在最佳解决方案时才使用它。

翻译自: https://www.javacodegeeks.com/2019/11/repeated-code.html

oracle密码不能重复用

oracle密码不能重复用_重复码相关推荐

  1. 查找重复文件_重复文件快速查找删除

    对于Mac用户来说,Cisdem Duplicate Finder是一款出色的重复查找工具,可以检测和查找所有重复内容,并批量删除它们以快速释放外部/内部硬盘空间.所有重复的照片,音乐,文档,视频或其 ...

  2. 查找重复文件_重复文件查找和磁盘整理工具:Tidy Up

    为大家带来一款实用的重复文件查找和磁盘整理工具,Tidy Up 5 for Mac可以用来快速查找重复文件并整理硬盘,tidy up 5 mac特别版会根据文件的种类组织分离找到项目,非常的好用. t ...

  3. batch spring 重复执行_重复的Spring Batch作业实例

    我有一个小的示例Spring Batch应用程序,该应用程序在首次启动时可以正常运行,但是每当我关闭该应用程序并重新启动jar时,我总是会收到此错误: Caused by: org.springfra ...

  4. oracle sql查数据是否有重复

    oracle sql查数据是否有重复 假如共有2列(aaa,bbb),那么执行下面sql就可以知道重复数据有哪些. select aaa,bbb,count(*) cnt from uf_test g ...

  5. Oracle分组后对分组内容重复 取第一个

    Oracle分组后对分组内容重复 的以另一列排序后 取第一个 语句 select * from( select a.grep, row_number() over (partition by a.gr ...

  6. oracle如何快速查找,Oracle 如何快速查找和删除重复记录

    今天整理用户系统的人员库,发现有很多人员有重复,需要删除掉这些冗余的人员信息:在网上查了一下,基本上有两种解决办法: 在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的, ...

  7. rabbitmq如何保证消息不被重复消费_如何保证消息不被重复消费

    一. 重复消息 为什么会出现消息重复?消息重复的原因有两个:1.生产时消息重复,2.消费时消息重复. 1.1 生产时消息重复 由于生产者发送消息给MQ,在MQ确认的时候出现了网络波动,生产者没有收到确 ...

  8. es 删除重复数据_怎么标识并删除SPSS数据库里的“重复个案”?

    背景:测试学生体质数据时,由于部分学生第1次测试成绩不合格,让他们进行了补测.但是,录入数据时,没有替换,造成这部分学生有2个体测成绩,现在需要找到这些重复个案并删除较差的成绩. 1. 数据概览2. ...

  9. oracle备份密码文件,[数据库]Oracle数据库备份dmp文件,使用cmd命令导入导出步骤,以及忘记Oracle密码_星空网...

    Oracle数据库备份dmp文件,使用cmd命令导入导出步骤,以及忘记Oracle密码 2013-07-30 0 dmp文件导入导出步骤 1.创建表空间 --datafile 的路径随便给,但是后面的 ...

最新文章

  1. 深圳某女孩身家上千万,却称自己不配追求大厂程序员
  2. 高并发高流量网络架构
  3. mysql删除以什么开头的数据_Mysql如何删除以“#sql-”开头的临时表
  4. scala整型的类型及取值范围
  5. 通过示例休眠–第1部分(删除孤儿)
  6. nodejs 之 nvm和pm2
  7. TI Inside,情报协同的最佳实践
  8. (84)FPGA面试题-多bit跨时钟域
  9. 关于python中自己写的模块之前相互调用函数
  10. CMake编译protobuf
  11. asp.net调用前台js调用后台代码分享
  12. MongoDB 自动分片 auto sharding
  13. 区分 点操作符+属性名 和 getAttribute()
  14. 如何重置IE浏览器?重置IE浏览器的方法
  15. Partial Multi-Label Learning(PML)-文献学习
  16. oracle替换手机号中间的4位为*号(姓名,手机号,邮箱脱敏)
  17. 死锁简述(死锁产生的四个条件,预防死锁)
  18. 如何成功实现“从经理到总监”的跨越?
  19. 天行健,君子当自强不息
  20. 【第二季】Arcgis地图制图基础|(一)Arcgis地图符号制作

热门文章

  1. 2021牛客暑期多校训练营9
  2. 牛客题霸 [ 岛屿数量] C++题解/答案
  3. 2020牛客国庆集训派对day4 Arithmetic Progressions
  4. 【每日一题】7月16日题目精讲—点权和
  5. 「LibreOJ Round #11」Misaka Network 与测试 (网络流跑二分图匹配)
  6. [多校联考-西南大学附中]切面包(线段树/概率与期望)+ Slow Path Finding Algorithm(拓扑排序/DP)+ 分数转化(数论)
  7. [JLOI2015]战争调度
  8. CF600F:Edge coloring of bipartite graph(二分图、构造)
  9. 最小代价(区间dp)(ybtoj)
  10. YbtOJ#903-染色方案【拉格朗日插值,NTT,分治】