Могу ли я вызвать методы поиска GORM для объекта вместо класса?

Я пытаюсь воспользоваться тем, что groovy более динамичен, чем java. Я хотел бы иметь блок кода, который делает

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, которые делают одно и то же для каждого типа.


person ScArcher2    schedule 01.02.2010    source источник


Ответы (1)


Вы всегда можете получить объект класса из экземпляра через instance.getClass(). Поэтому должно работать следующее:

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

пока класс экземпляра поддерживает findBySomethingAndSomething

person Dónal    schedule 01.02.2010
comment
Вместо этого рассмотрите возможность использования getClass(). В этом случае не будет большой разницы, но это хорошая привычка, если «экземпляр» когда-либо является картой. - person John Stoneham; 03.02.2010
comment
Хороший совет, Джон, это несколько раз ловило меня, когда тесты передавали карту для имитации экземпляра - я обновил свой ответ. - person Dónal; 03.02.2010