Sunday, March 18, 2018

Groovy - @Delegate - Import all methods

if we use the delegate annotation for the Date class we get all the methods of the Date class in our class. 


class SimpleEvent {
    @Delegate Date when
    @Delegate List<Stringattendees []
    int maxAttendees 0
    String description
}
 
def event new SimpleEvent(whennew Date(7description'Small Groovy seminar'maxAttendees2)
 
assert == event.size()  // Delegate to List.size()
assert event.after(new Date())  // Delegate to Date.after()
assert 'Small Groovy seminar' == event.description
assert == event.maxAttendees
 
event << 'mrhaki' << 'student1'  // Delegate to List.leftShift()
assert == event.size()
assert 'mrhaki' == event[0]
 
event -= 'student1'  // Delegate to List.minus()
assert == event.size()


We have used the @Delegate annotations and as by magic the SimpleEvent has all methods of both the Date class and List interface. 

SimpleEvent class has all methods from the List interface we can override the methods as well. 

In our sample we override the add()

class SimpleEvent {
    @Delegate Date when
    @Delegate List<Stringattendees []
    int maxAttendees 0
    String description
 
    boolean add(Object value{
        if (attendees.size(maxAttendees{
            return attendees.add(value)
        else {
            throw new IllegalArgumentException("Maximum of ${maxAttendees} attendees exceeded.")
        }
    }
}
 
def event new SimpleEvent(whennew Date(7description'Small Groovy seminar'maxAttendees2)
event << 'mrhaki' << 'student1'
 
try {
    event << 'three is a crowd.'
    assert false
catch (IllegalArgumentException e{
    assert 'Maximum of 2 attendees exceeded.' == e.message
}



No comments:

Post a Comment

உப்பு மாங்காய்

சுருக்குப்பை கிழவி. சுருக்கங்கள் சூழ் கிழவி. பார்க்கும் போதெல்லாம் கூடையுடனே குடியிருப்பாள். கூடை நிறைய குட்டி குட்டி மாங்காய்கள். வெட்டிக்க...