“Groovy”是什么意思;作为「;运算符是否在运行时为用户定义的类创建子类?

“Groovy”是什么意思;作为「;运算符是否在运行时为用户定义的类创建子类?,groovy,coercion,Groovy,Coercion,在Groovy中,当我在Groovy脚本中编写以下代码时 class Emp { public String getId() { return "12345"; } } def coercedInstance = [ getId: { "99999" } ] as Emp println new Emp().getId() println coercedInstance .getId() 在这里使用as操作符,我是否在运行时创建实

在Groovy中,当我在Groovy脚本中编写以下代码时

class Emp {
    public String getId() {
         return "12345";
    }
}

def coercedInstance = [ 
   getId: {
     "99999"
    }
] as Emp

println new Emp().getId()
println coercedInstance .getId()
在这里使用as操作符,我是否在运行时创建实际Emp类的子类,并在运行时提供方法体


我看过其他关于堆栈溢出的文章,并且了解到Groovy使用DefaultGroovyMethods.java和DefaultTypeTransformation.java来执行强制。但无法确定它是否是子类化的

是,一个
as
操作符创建一个类型为目标类的子类的对象。使用生成(在内存中)扩展给定基类的代理类

class-Emp{
公共字符串getId(){
返回“12345”;
}
}
def强制状态=[
getId:{
"99999"
}
]作为Emp
断言(Emp的强制实例)
断言(强制状态.class!=Emp)
断言(Emp.isAssignableFrom(impressedInstance.class))
println-impressedInstance.dump()//
具体来说,您的情况如下:

  • asType
    方法转到执行
    ProxyGenerator.INSTANCE.InstanceAggregateFromBaseClass(map,clazz)
  • 在下一步中,将创建对象
  • 在最后一步中,调用get以返回新生成的类,该类是基类的代理