Grails автоматически приводит строки в один из классов моего домена - PullRequest
0 голосов
/ 08 февраля 2012

У меня есть класс домена, например:

class MyDomainClass{
  String name
}

И интерфейс с подписью вроде:

BigDecimal doBigThangs(MyDomainClass startHere)

Я хочу, чтобы это можно было так назвать

doBigThangs('stuff')

И пусть он автоматически приводит строку 'stuff' в соответствующий класс MyDomainClass. Это то, что я пробовал, но, возможно, мне нужно использовать «asType» или что-то.

ExpandoMetaClass.enableGlobally()
String.metaClass.toMyDomainClass = {->MyDomainClass.findByNameLike(delegate)}

1 Ответ

1 голос
/ 08 февраля 2012

Вы правы: вы можете добавить преобразование типов, переопределив asType.Ваш пример будет выглядеть примерно так:

oldAsType = String.metaClass.getMetaMethod("asType", [Class] as Class[])
String.metaClass.asType = { Class c ->
    if (c == MyDomainClass) { 
        MyDomainClass.findByNameLike(delegate)
    } else {
        oldAsType.invoke(delegate, c)
    }
}

Однако groovy не будет молча приводить String к другому типу при вызове метода.Вам придется вызывать ваш метод так:

doBigThangs('stuff' as MyDomainClass)
...