老玩家打新副本,无人掉队
|
完美。 但是,它不能完成Person -> String类型的转换。一般来说,我们有两种途径来达到此目的: 1.直接方式:写一个Person转String的转换器,专用 a.缺点明显:多写一套代码 2.组合方式(推荐):如果目前已经有Person -> Integer的了,那我们就组合起来用就非常方便啦,下面这个例子将告诉你使用这种方式完成“需求” a.缺点不明显:转换器一般要求与业务数据无关,因此通用性强,应最大可能的复用 下面示例二将帮你解决通过复用已有能力方式达到Person -> String的目的。 示例二:使用Printer,有中间转换 基于示例一,若要实现Person -> String的话,只需再给写一个Person -> Integer的转换器放进ConversionService里即可。
❝说明:一般来说ConversionService已经具备很多“能力”了的,拿来就用即可。本例为了帮你说明底层原理,所以用的是一个“干净的”ConversionService实例❞ 转换步骤分为两步: 1.若源类型(实际类型)不是该Printer类型的泛型类型的子类型的话,那就尝试使用conversionService转一趟 a.例如:Printer处理的是Number类型,但是你传入的是Person类型,这个时候conversionService就会发挥作用了
2.交由目标格式化器Printer执行实际的转换逻辑 格式化器的注册管理远没有转换器那么复杂,因为它是基于上层适配的思想,最终适配为Converter来完成注册的。所以最终注册进去的实际是个经由格式化器适配来的转换器,完美复用了那套复杂的转换器管理逻辑。 ❝这种设计思路,完全可以“CV”到我们自己的编程思维里吧❞ 甭管是Printer还是Parser,都会被适配为GenericConverter从而被添加到ConverterRegistry里面去,被当作转换器管理起来。现在你应该知道为何FormatterRegistry接口仅需提供添加方法而无需提供删除方法了吧。 当然喽,关于Printer/Parser的适配实现亦是本文本文关注的焦点,里面大有文章可为,let's go! PrinterConverter:Printer接口适配器
把Printer适配为转换器,转换目标为fieldType -> String。 (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
