Noark入门之转化器

在之前,我们编写的模板类文件时,总有个子类继承模板类,来重解析父类的字符串配置奖励...

当项目功能越做越多时,这种很恶心的解析一次又一次的复制很是讨厌,多人之间写法又不完全一致,导致后期维护很头大...

来看一下Noark提供的转化器带来的新感受

比如副本通关奖励配置格式如下

道具编号:数量,道具编号:数量,道具编号:数量

编码SimpleItem.java

1public class SimpleItem { 2 private String id; 3 private int num; 4 //省略GetSet方法... 5}

编码SimpleItemList.java

1public class SimpleItemList { 2 private List<SimpleItem> items; 3 //省略GetSet方法... 4}

副本模板类添加SimpleItemList注入

1@TplAttr(name = "Items") 2private SimpleItemList items;

是不是很像模板注入中的IntList,没错就是这样简单方便,但是这还不能正常工作...

每一个成功运作的背后都有一个类型转化器在默默的为他解析构建生成注入...

编写SimpleItemListConverter.java

1@TemplateConverter(SimpleItemList.class) 2public class SimpleItemListConverter extends AbstractConverter<SimpleItemList> { 3 4 @Override 5 public SimpleItemList convert(String value) throws Exception { 6 SimpleItemList result = new SimpleItemList(); 7 if (StringUtils.isNotEmpty(value)) { 8 String[] items = StringUtils.split(value, ","); 9 List<SimpleItem> itemList = new ArrayList<>(items.length); 10 for (String item : items) { 11 String[] args = StringUtils.split(item, ":"); 12 itemList.add(new SimpleItem(args[0], Integer.parseInt(args[1]))); 13 } 14 result.setItems(itemList); 15 } else { 16 result.setItems(Collections.emptyList()); 17 } 18 return result; 19 } 20 21 @Override 22 public String buildErrorMsg() { 23 return "道具编号:数量,道具编号:数量,道具编号:数量"; 24 } 25}

需求又来了,如果策划说副本扫荡奖励也跟这个长一样,是不是还要写个类再写个转化器呢?

如果是配置格式长得一样,那就直接用嘛

1@TplAttr(name = "SweepReward") 2private SimpleItemList sweepReward;

只要编写一次,到处转化...

研发中,有了转化器的存在,整体性福感满满的,因为再也不会有相同功能的配置长两种格式,数值大爷都爱你了...

想当年啊,策划A设计通关奖励是用逗号,策划B在扫荡奖励用分号,程序观点反正坑得是数值,数值观点反正出了问题找程序,一直在相互伤害中成长

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

你不可不知的JS面试题(第二期)

1、什么是继承?子类可以使用父类的所有功能,并且对功能进行扩展。新增方法改用方法(1)、ES6使用extends子类继承父类的方法。// 父类    class A        constructor(name)            this.name name;                getNa