加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy将字符串类型转换为自定义类型的方法

发布时间:2020-12-14 17:03:17 所属栏目:大数据 来源:网络整理
导读:将一个字符串转换为自定义类型: 例如Quantity是自定义的一个class,现在想这么调用 Quantity quantity = "100个" as Quantity 或 def quantity = "100个".asType(Quantity) 需要重载String的asType方法(String.metaClass.asType)。具体实现如下(注意stat

将一个字符串转换为自定义类型:

例如Quantity是自定义的一个class,现在想这么调用
Quantity quantity = "100个" as Quantity

def quantity = "100个".asType(Quantity)

需要重载String的asType方法(String.metaClass.asType)。具体实现如下(注意static方法块):


package com.cninsure.datatype

/**
* 数量单位
*/
class Quantity extends InsDataType {
??? Number amount
??? String unit

??? Quantity() {
??? }

??? static {
??????? String.metaClass.asType {? Class c ->
??????????? if (Quantity == c) {
??????????????? Quantity.from(delegate)
??????????? } else {
??????????????? delegate.asType(c)
??????????? }
??????? }
??? }

??? @Override
??? void build(val) {
??????? if (val instanceof Quantity) {
??????????? this.amount = val.amount
??????????? this.unit = val.unit
??????????? return
??????? }
??????? def regular = /^(/d+(/./d+)?)/s?(/S+)?/
??????? if (!(val ==~ regular)) {
??????????? throw new IllegalArgumentException("模式不匹配")
??????? }
??????? def result = (val =~ regular)?????????? //拆分
??????? Number value = result[0][1]
??????? String qu = result[0][3]

??????? this.amount = value
??????? this.unit = qu
??????? return
??? }

??? static Quantity from(val) {
??????? if (val instanceof Quantity) return val
??????? Quantity quantity = new Quantity()
??????? quantity.build(val)
??????? return quantity
??? }

??? @Override
??? boolean identity(Object val) {
??????? if (!(val instanceof Quantity)) {
??????????? val = from(val)
??????? }
??????? if (amount == val.amount && unit == val.unit) return true
??????? return false
??? }

??? @Override
??? String display() {
??????? return amount.toString() + unit.toString()
??? }


??? public String toString() { ??????? return "Quantity{" + ??????????????? "amount=" + amount + ??????????????? ",unit='" + unit + '/'' + ??????????????? '}'; ??? } }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读