在Grails中的instanceof

Tom*_*máš 6 grails

如何确定集合中的Object类型?

class Human{...}
class Man extends Human{...}
class Women extends Human{...}

def humans = Human.findAll() 
humans.each(){ human ->

    // ??? , it is not work
   if ( human instanceof Man ) { println "Man" }
   if ( human instanceof Woman ) { println "Woman" }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢,
汤姆

Ben*_*err 16

根据你的描述,我会说你正在遇到Hibernate代理对象(即类名是:Human _ $$ javaassist*).解决方案是使用GORM提供的insatnceOf版本.无需急于获取或使用其他方法.

def planet = Planet.get(1)
planet.humans.each(){ human ->
    if (human.instanceOf(Man)) { println "is Man"}
    if (human.instanceOf(Woman)) { println "is Woman"}
}
Run Code Online (Sandbox Code Playgroud)

注意区别human.instanceOf(Man)而不是man instanceof Man.使用gorm方法而不是java关键字.

您可以在[参考] [1]中看到参考文档的这一部分.请参阅"懒惰的单端关联和代理"小节

[1]:http://grails.org/doc/latest/guide/single.html#5.5.2.8渴望和懒惰的提取