在groovy中,`ObjectMapper mapper=[]`是什么意思?

在groovy中,`ObjectMapper mapper=[]`是什么意思?,groovy,gretty,Groovy,Gretty,我是groovy新手,正在阅读一个项目的源代码 我不理解代码对象映射器映射器=[],这里的[]是什么意思?我以为它是一个列表,但是如何将它分配给对象映射器 更新 取决于,似乎[]意味着调用默认构造函数。因此,它意味着: static final ObjectMapper mapper = new ObjectMapper() 但是: 及 引发异常: Caught: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Ca

我是groovy新手,正在阅读一个项目的源代码

我不理解代码
对象映射器映射器=[]
,这里的
[]
是什么意思?我以为它是一个
列表
,但是如何将它分配给
对象映射器


更新

取决于,似乎
[]
意味着
调用默认构造函数
。因此,它意味着:

static final ObjectMapper mapper = new ObjectMapper()
但是:

引发异常:

Caught: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '[]' 
with class 'java.util.ArrayList' to class 'java.lang.Integer' 
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '[]' with class  
'java.util.ArrayList' to class 'java.lang.Integer'

这是对ObjectMapper的默认构造函数的调用

似乎
[]
总是创建为空的ArrayList,但当分配给单独的类型时,groovy会尝试执行类型强制并找到合适的构造函数

对于字符串,它只调用列表上的toString方法,并将其作为字符串。对于对象,它会查找具有适当数量和类型参数的构造函数

Groovy不希望对扩展了Number(Integer、BigDecimal等)并抛出ClassCastException的java库类执行此操作

示例:

class A {
    String value;
    A() { this("value"); }
    A(String value) { this.value = value; }
}

def A defaultCons = [];
// equivalent to new A()
def A argsCons = ["x"];
// equivalent to new A("x")
def list = [1,2];
// literal ArrayList notation
def String str = [];
// equivalent to str = "[]"

println "A with default constructor: " + defaultCons.value;
println "A with String arg constructo: " + argsCons.value;
println "list: " + list;
println "str: " + str;

这是对ObjectMapper的默认构造函数的调用

似乎
[]
总是创建为空的ArrayList,但当分配给单独的类型时,groovy会尝试执行类型强制并找到合适的构造函数

对于字符串,它只调用列表上的toString方法,并将其作为字符串。对于对象,它会查找具有适当数量和类型参数的构造函数

Groovy不希望对扩展了Number(Integer、BigDecimal等)并抛出ClassCastException的java库类执行此操作

示例:

class A {
    String value;
    A() { this("value"); }
    A(String value) { this.value = value; }
}

def A defaultCons = [];
// equivalent to new A()
def A argsCons = ["x"];
// equivalent to new A("x")
def list = [1,2];
// literal ArrayList notation
def String str = [];
// equivalent to str = "[]"

println "A with default constructor: " + defaultCons.value;
println "A with String arg constructo: " + argsCons.value;
println "list: " + list;
println "str: " + str;

非常感谢。但是我发现了一些不同的东西:
strings=[]
,然后
s
就是字符串
[]
,这是因为String是一个特例。Groovy只是认为您忘了在
[]
周围加引号。请查看我更新的问题。有没有文章可以解释这个特性?请看我找到的链接。它解释了Groovy如何使用列表和映射来调用类的构造函数。只是为了澄清字符串的情况:Groovy并不是在“添加引号”,而是在幕后Groovy强制对象类型。这就像您实际键入了
String s=[]作为String
,这意味着
[]的意思。asType(String)
变成了
[].toString()
。空列表的字符串表示形式为
“[]”
。List和Map有一些特殊的
aType
处理,允许它们转换成大多数GroovyBeans或JavaBeans。谢谢。但是我发现了一些不同的东西:
strings=[]
,然后
s
就是字符串
[]
,这是因为String是一个特例。Groovy只是认为您忘了在
[]
周围加引号。请查看我更新的问题。有没有文章可以解释这个特性?请看我找到的链接。它解释了Groovy如何使用列表和映射来调用类的构造函数。只是为了澄清字符串的情况:Groovy并不是在“添加引号”,而是在幕后Groovy强制对象类型。这就像您实际键入了
String s=[]作为String
,这意味着
[]的意思。asType(String)
变成了
[].toString()
。空列表的字符串表示形式为
“[]”
。List和Map有一些特殊的
asType
处理,允许它们转换成大多数GroovyBeans或javabean。
Caught: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '[]' 
with class 'java.util.ArrayList' to class 'java.lang.Integer' 
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '[]' with class  
'java.util.ArrayList' to class 'java.lang.Integer'
class A {
    String value;
    A() { this("value"); }
    A(String value) { this.value = value; }
}

def A defaultCons = [];
// equivalent to new A()
def A argsCons = ["x"];
// equivalent to new A("x")
def list = [1,2];
// literal ArrayList notation
def String str = [];
// equivalent to str = "[]"

println "A with default constructor: " + defaultCons.value;
println "A with String arg constructo: " + argsCons.value;
println "list: " + list;
println "str: " + str;