Groovy中动态类型的类型

问题描述:

主要问题:可以使用哪些运算符,属性等来确定Groovy中的变量类型?Groovy中动态类型的类型

背景:

我有一个任意深度嵌套的字典数据结构。这是在Grails控制器中调用request.JSON的结果。我首先想验证某些键是否在字典中,并使用适当的类型。我想实现这个的方式是创建一个原型数据结构并定义一个比较数据结构的方法。喜欢的东西:

def prototype = [ username: "JennyJeans", 
        message: [ subject: "Hello World!", 
           body: "Will write soon." 
          ] 
       ] 

当然,这里的字符串的内容没有关系。然后,在我的动作,我确认是这样的:

if(similarDataStructure(prototype, request.JSON)) { 
// XXX 
} else { 
// report error 
} 

那么,什么是similarDataStructure方法呢?在伪代码中:

def similarDataStructure(a, b) { 
    if(type(a) != type(b)) return false 

    if(type(a) == dictionary) { 
    for key in a: 
     if(!similarDataStructure(a[key], b[key])) return false 
    } 

    return true 
} 

如果您可以考虑更深入的验证方法,请告诉我。

+0

在进一步的思考中,我发现了什么我真的想实现是Grails的一个JSON模式验证 – 2009-08-11 02:46:25

要获得类型,可以使用的A.class,b.class并加以比较:if(a.class == b.class) { }

要检查它是否是一个字典,你可以拨打:a instanceof Map

然而,尝试在Groovy控制台下面的代码,自己看看吧;-)

def src = [ username: "JennyJeans", 
      message: [ subject: "Hello World!", 
         body: "Will write soon."] 
     ] 

def p1 = [ username: "JennyJeans", 
      message: [ subject: "Hello World!", 
         body: "Will write soon."] 
     ] 

def p2 = [ username: "JennyJeans", 
      message: [ subject: "Hello World!", 
         body: "Will read soon."] 
     ] 

println src == p1 
println src == p2