Это всего лишь очень простой пример того, что я хочу сделать. Есть немного больше, что происходит в методе foobar, но это суть того, что я делаю. Очевидно, что это не сработает, поскольку он не скомпилируется, но мне интересно, неправильно ли я передал класс неправильно или с помощью параметра «className» не так. Я знаю, что могу переработать его, чтобы взять строку имени класса и просто сопоставить ее, но, похоже, это позор. Это было бы так красиво и сухо.Groovy - Можно ли передать класс в качестве параметра?
class Foo {
String name
}
class Bar {
String name
}
def foobar(field, className) {
def instance = className.findByName(jsonParams.field)
if(!instance) {
instance = new className(name: jsonParams.field)
}
return instance
}
foobar(foos, Foo)
foobar(bars, Bar)
Я не знаю много Java или Groovy, поэтому я не уверен, что возможно, пока невозможно. Не стесняйтесь просто сказать мне «Нет». Я пробовал поиск в Интернете и не нашел ничего, что действительно ответит на вопрос для меня. Просто нет, было бы здорово в этот момент ха-ха.
Какова цель параметра «field»? Обычно устанавливаете свойство? Похоже, вы хотите установить «имя» экземпляра, который создается, что можно сделать. – pickypg
Да. Это именно то, что я хочу сделать. Тем не менее, он продолжает терпеть неудачу в этой строке, говоря, что он не может разрешить класс className. Параметр поля - это просто, чтобы вырезать правильные данные объекта json. –
Попробуйте 'className.newInstance()' вместо 'new className()'. Также используйте 'foobar (field, Class className)', чтобы сделать подпись понятной для понимания. – dmahapatro