Если у вас есть конструктор
Customer(String name, String email, String phone)
Вы можете сделать:
new Customer(*infoLine.split(','))
Если вы не хотите писать конструктор, вы можете заставить Groovy создать его для вас:
import groovy.transform.*
@TupleConstructor
class Customer {
String name
String email
String phone
}
String infoLine = "Stanislav,stanislav@stackoverflow.com,004612345678"
new Customer(*infoLine.split(','))
Или даже лучше, @Immutable
, поскольку это делает свойства final
@Immutable
class Customer {
String name
String email
String phone
}
Другой вариант (при условии, что ваши поля определены в порядке их появления в строке, а других полей нет) - это сгенерировать карту [name: 'aaa', emai... etc
и сообщить groovy, чтобы преобразовать карту в Customer как :
class Customer {
String name
String email
String phone
}
String infoLine = "Stanislav,stanislav@stackoverflow.com,004612345678"
def customer = [
Customer.declaredFields.findAll { !it.synthetic }*.name,
infoLine.split(',')
].transpose().collectEntries() as Customer
Но это кажется хрупким, и, вероятно, быстрее добавить аннотацию или конструктор.