2010-02-01 63 views
1

我想利用groovy比java更具动态的优势。 我想有代码,不会我可以在对象而不是类中调用GORM“find”方法吗?

TypeA type = //do something to build an object 
TypeA dbType = TypeA.findBySomethingAndSomething(something, somethingelse) 
if(dbType != null) 
    type.id = dbType.id 
type.save() 

但可以支持相同findBySomethingAndSomething方法多个对象的工作块。

是否可以说

def type = //do something to build an object 
def dbType = type.findBySomethingAndSomething(type.identifier, type.otheridentifier) 
if(dbType != null) 
    type.id = dbType.id 
type.save() 

是否有“更好”的方式来做到这一点? 我试图避免一个大的switch语句或if/else系列对每种类型做基本相同的事情。

回答

2

您可以始终通过instance.getClass()从实例中获取类对象。因此,下面应该工作:

instance.getClass().findBySomethingAndSomething(type.identifier, type.otheridentifier) 

只要实例的类支持findBySomethingAndSomething

+2

考虑使用的getClass()代替。在这种情况下不会有太大的改变 - 但是如果'instance'是Map,这是一个很好的习惯。 – 2010-02-03 02:57:34

+0

良好的建议约翰,当测试通过地图模拟实例时,这让我感到了几次 - 我已经更新了我的回复。 – 2010-02-03 03:25:22