Dictionary Groovy:map.get()不';检索不到
要求:读取spring配置。并尝试将Springbean解组为Java对象 我对以下Groovy代码有一些问题:Dictionary Groovy:map.get()不';检索不到,dictionary,groovy,tostring,Dictionary,Groovy,Tostring,要求:读取spring配置。并尝试将Springbean解组为Java对象 我对以下Groovy代码有一些问题: println(“找到>>”+beanMap[beanObject.parent])这不会返回 正如我所期望的那样,让我学习bean类。更奇怪的是,接下来的两行输出 我希望toString()的输出看起来像,如果clazz为null,它应该打印parentClazz,但显然不是这样。为什么会这样 源代码 class TestGroovy { public static voi
class TestGroovy {
public static void main(String[] args) throws FileNotFoundException {
readXML();
}
private static void readXML() {
//def beans = new XmlSlurper().parse(new File("C:/Developer/interest-ratecollector-system.xml"))
def beans = new XmlSlurper().parse(new File("C:/Developer/beans.xml"))
def beanMap = [:];
//println beans.bean.size()
for (bean in beans.bean.list()) {
//print("id=" + bean.@id + ",clazz=" + bean.@class + ",parent = " + bean.@parent)
Bean beanObject = new Bean(id: bean.@id, clazz: bean.@class, parent: bean.@parent)
beanMap[beanObject.id] = beanObject;
//println("map>"+beanMap)
if (beanMap.size()>1)
beanMap.each{element ->
println "elem="+(element.key==beanObject.parent)
println(beanMap[element.key])
println(beanMap[beanObject.parent])
}
beanObject.parentClazz = beanMap[beanObject.parent]
println("found >> "+beanMap[beanObject.parent])
println("\nbeanObject="+beanObject)
println()
}
}
}
@ToString(includeNames=true)
class Bean {
def id, clazz, parent,parentClazz
@Override
public String toString() {
return "Bean{" +
"id=" + id +
",clazz=" + clazz?:parentClazz +
", parent=" + parent +
"parentClazz=" + parentClazz +
'}';
}
boolean equals(o) {
if (this.is(o)) return true
if (getClass() != o.class) return false
Bean bean = (Bean) o
if (id != bean.id) return false
return true
}
int hashCode() {
return id.hashCode()
}
}
XML
<beans>
<bean id="class1" class="com.Class" abstract="true" init-method="init">
</bean>
<bean id="SHRED" parent="class1" abstract="true">
<property name="serviceName">
<value>SSS</value>
</property>
</bean>
</beans>
您正在将属性作为贴图的键放入。尝试更改:
Bean beanObject = new Bean( id: bean.@id, clazz: bean.@class, parent: bean.@parent )
到
此外,您还可以通过将Bean
更改为:
@EqualsAndHashCode( includes=[ 'id' ] )
class Bean {
def id, clazz, parent,parentClazz
String toString() {
"Bean{id=$id clazz=${clazz ?: parentClazz?.clazz} parent=$parent}"
}
}
您的readXML
方法可以提炼为:
private static void readXML() {
def beans = new XmlSlurper().parse( new File("C:/Developer/beans.xml") )
def beanMap = beans.bean.inject( [:] ) { map, bean ->
Bean beanObject = new Bean( id : bean.@id.text(),
clazz : bean.@class.text(),
parent : bean.@parent.text() )
map << [ (beanObject.id): beanObject ]
beanObject.parentClazz = map[ beanObject.parent ]
map
}
}
private static void readXML(){
def beans=new XmlSlurper().parse(新文件(“C:/Developer/beans.xml”))
def beanMap=beans.bean.inject([:]){map,bean->
Bean beanObject=新Bean(id:Bean@id.text(),
clazz:bean.@class.text(),
父:bean。@parent.text()
地图
map太完美了。谢谢Tim,这是我的第一个Groovy代码,显然不是很紧凑。@anirbanchowdhury不用担心:-)主要的是它工作正常,而且你很喜欢它的语言:-)
@EqualsAndHashCode( includes=[ 'id' ] )
class Bean {
def id, clazz, parent,parentClazz
String toString() {
"Bean{id=$id clazz=${clazz ?: parentClazz?.clazz} parent=$parent}"
}
}
private static void readXML() {
def beans = new XmlSlurper().parse( new File("C:/Developer/beans.xml") )
def beanMap = beans.bean.inject( [:] ) { map, bean ->
Bean beanObject = new Bean( id : bean.@id.text(),
clazz : bean.@class.text(),
parent : bean.@parent.text() )
map << [ (beanObject.id): beanObject ]
beanObject.parentClazz = map[ beanObject.parent ]
map
}
}
private static void readXML() {
def beans = new XmlSlurper().parse( new File("C:/Developer/beans.xml") )
def beanMap = beans.bean.inject( [:] ) { map, bean ->
map << [ (bean.@id.text()): new Bean( id : bean.@id.text(),
clazz : bean.@class.text(),
parent : bean.@parent.text(),
parentClazz : map[ bean.@parent.text() ] ) ]
}
}