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

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

例如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 + '\'' +

'}';

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值