Noark入门之转化器

Stella981
• 阅读 589

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

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

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

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

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

编码SimpleItem.java

public class SimpleItem {
    private String id;
    private int num;
    //省略GetSet方法...
}

编码SimpleItemList.java

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

副本模板类添加SimpleItemList注入

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

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

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

编写SimpleItemListConverter.java

@TemplateConverter(SimpleItemList.class)
public class SimpleItemListConverter extends AbstractConverter<SimpleItemList> {

    @Override
    public SimpleItemList convert(String value) throws Exception {
        SimpleItemList result = new SimpleItemList();
        if (StringUtils.isNotEmpty(value)) {
            String[] items = StringUtils.split(value, ",");
            List<SimpleItem> itemList = new ArrayList<>(items.length);
            for (String item : items) {
                String[] args = StringUtils.split(item, ":");
                itemList.add(new SimpleItem(args[0], Integer.parseInt(args[1])));
            }
            result.setItems(itemList);
        } else {
            result.setItems(Collections.emptyList());
        }
        return result;
    }

    @Override
    public String buildErrorMsg() {
        return "道具编号:数量,道具编号:数量,道具编号:数量";
    }
}

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

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

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

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

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

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
你不可不知的JS面试题(第二期)
1、什么是继承?子类可以使用父类的所有功能,并且对功能进行扩展。新增方法改用方法(1)、ES6使用extends子类继承父类的方法。// 父类    class A        constructor(name)            this.name name;                getNa
Stella981 Stella981
3年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Wesley13 Wesley13
3年前
Java基础28
1/2继承的概述:31.提高了代码复用性,简化了代码42.让类与类之间产生了继承关系,才有了后面的多态特性的存在5注意:千万不要为了获取其他类的功能简化代码,而建立继承关系,必须要类与类之间存在继承关系,继承关系:isa67子类拥有父类的成员,子类不能拥有父类
Wesley13 Wesley13
3年前
unity将 -u4E00 这种 编码 转汉字 方法
 unity中直接使用 JsonMapper.ToJson(对象),取到的字符串,里面汉字可能是\\u4E00类似这种其实也不用转,服务器会通过类似fastjson发序列化的方式,将json转对象,获取对象的值就是中文但是有时服务器要求将传参中字符串中类似\\u4E00这种转汉字,就需要下面 publ
Stella981 Stella981
3年前
Noark入门之异步事件
引入异步事件主要是为了各模块的解耦,每当完成一个动作时,向系统发布一个事件,由关心的模块自己监听处理,可选择同步处理,异步处理,延迟处理。何时发布事件,当其他模块关心此动作时<br比如获得道具时,任务系统模块要判定完成进度,BI模块需要上报等等都可以监听此事件,已达模块解耦0x00事件源一个实现xyz.noark.core.event
Stella981 Stella981
3年前
Mybatis别名的配置使用
之前,我们在sql映射xml文件中的引用实体类时,需要写上实体类的全类名(包名类名),如下<! 创建用户(Create)   <insert id"addUser" parameterType"me.gacl.domain.User"    insert into users(name,