前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原 荐 OSGL 工具库 - 类型转换的艺术

原 荐 OSGL 工具库 - 类型转换的艺术

作者头像
老码农
发布2018-06-20 17:04:28
5500
发布2018-06-20 17:04:28
举报
文章被收录于专栏:老码农专栏

在前面的 OSGL 工具库之编程艺术系列中我们讲述了

本篇讲述如何使用 OSGL 工具库进行类型转换.

类型转换的 API 使用非常简单:

代码语言:javascript
复制
Y y = $.convert(x).to(Y.class)

1. 系统内置类型转换

1.1 基本类型转换示例

代码语言:javascript
复制
String s = "60";
int n = $.convert(s).to(Integer.class); // 60
n = $.convert(s).toInteger(); // 60
n = $.convert(s).toInt(); // 60
s = $.convert(n).toString(); // "60"
s = $.convert(n).to(String.class); // "60"

1.2 hint (转换提示) 的使用

代码语言:javascript
复制
// 这里 hint 的意思是 radix
n = $.convert("FF").hint(16).toInt(); // 255
// 这里 hint  的意思是日期格式
Date date = $.convert("06 Apr 2018").hint("dd MMM yyyy").toDate(); // 2018-04-06
String dateStr = $.convert(date).hint("yyyy-MM-dd").toString(); // 2018-04-06

1.3 Enum 类型转换示例

代码语言:javascript
复制
enum Code {
    AB, bc, Red;
}
Code code; 
code = $.convert("AB").to(Code.class); // Code.AB
code = $.convert("ab").caseInsensitivie().to(Code.class); // Code.AB

1.4 空值的处理

代码语言:javascript
复制
int n = $.convert(null).to(int.class); // 0
n = $.convert(null).to
Integer N = $.convert(null).to(Integer.class); // null
1.4.1 使用默认值
代码语言:javascript
复制
n = $.convert(null).defaultTo(5).toInt(); // 5
n = $.convert("2").defaultTo(5).toInt(); // 2

1.5 通过管道来级联类型转换

代码语言:javascript
复制
// 例1: 不用日期函数来转换日期格式:
// 06/Apr/2018 -> 2018-04-06
s = $.convert("06/Apr/2018")
        .hint("dd/MMM/yyyy")
        .pipeline(Date.class)
        .hint("yyyy-MM-dd")
        .toString(); // 2018-04-06

// 例2: 日期转到byte[]
byte[] ba = $.convert(new Date()).pipeline(String.class).to(byte[].class);
1.5.1 隐式管道

注意, 并没有注册直接的从 Date 到 byte[] 的转换器, OSGL 选择最近转换路径自动转换, 下面的代码的实际转换路径为: Date -> String -> Reader -> InputStream -> byte[]

代码语言:javascript
复制
ba = $.convert(new Date()).to(byte[].class);

2. 向 OSGL 注册并使用自己的类型转换器

2.1 源类型

代码语言:javascript
复制
public class MyFrom {
    public String id;

    public MyFrom(String id) {
        this.id = id;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        MyFrom myFrom = (MyFrom) o;
        return id != null ? id.equals(myFrom.id) : myFrom.id == null;
    }

    @Override
    public int hashCode() {
        return id != null ? id.hashCode() : 0;
    }
}

2.2 目标类型

代码语言:javascript
复制
public class MyTo {
    public String id;

    public MyTo(String id) {
        this.id = id;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        MyTo MyTo = (MyTo) o;
        return id != null ? id.equals(MyTo.id) : MyTo.id == null;
    }

    @Override
    public int hashCode() {
        return id != null ? id.hashCode() : 0;
    }
}

2.3 转换器

代码语言:javascript
复制
// MyFrom -> MyTo
public class MyConverter extends $.TypeConverter<MyFrom, MyTo> {
    @Override
    public MyTo convert(MyFrom myFrom) {
        return new MyTo(myFrom.id);
    }
}
// String -> MyFrom
public class MyConverter extends $.TypeConverter<String, MyFrom> {
    @Override
    public MyFrom convert(String s) {
        return new MyFrom(s);
    }
}

2.4 注册转换器到 OSGL

代码语言:javascript
复制
TypeConverterRegistry.INSTANCE
    .register(new MyConverter())
    .register(new StringToMyFrom());

2.5 使用自定义转换器

代码语言:javascript
复制
String s = "abc";
MyFrom from = new MyFrom(s);
MyTo to = $.convert(from).to(MyTo.class);

// 通过隐式管道转换 String 到 myTo
to = $.convert(s).to(MyTo.class);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 系统内置类型转换
    • 1.1 基本类型转换示例
      • 1.2 hint (转换提示) 的使用
        • 1.3 Enum 类型转换示例
          • 1.4 空值的处理
            • 1.4.1 使用默认值
          • 1.5 通过管道来级联类型转换
            • 1.5.1 隐式管道
        • 2. 向 OSGL 注册并使用自己的类型转换器
          • 2.1 源类型
            • 2.2 目标类型
            • 2.3 转换器
              • 2.4 注册转换器到 OSGL
                • 2.5 使用自定义转换器
                相关产品与服务
                图像处理
                图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档