Я не верю, что вы можете. Вероятно, вы могли бы удалить сеттеры через мета-класс, но вам будет сложно сделать поля окончательными, и коллекции нужно будет заменить на неизменные варианты.
Начиная с Groovy 2.2.1 у вас есть copyWith
дополнение к Immutable
... Может быть, это может помочь?
import groovy.transform.*
@Immutable(copyWith=true)
class Test {
String name
int age
List likes
}
def alice = new Test('alice', 26, [ 'cheese' ])
tim = alice.copyWith(name:'tim', age:32)
timHam = tim.copyWith(likes:[ 'ham' ])
assert alice.name == 'alice' && alice.age == 26 && alice.likes == [ 'cheese' ]
assert tim.name == 'tim' && tim.age == 32 && tim.likes == [ 'cheese' ]
assert timHam.name == 'tim' && timHam.age == 32 && timHam.likes == [ 'ham' ]
Там же это Immutator package для Java, который выглядит интересно, но я не мог заставить его работать в Groovy консоли ... Может быть, стоит посмотреть, если он работает в обычном заводной контексте с пакетами и т.д.