Reputation: 73
I have a script where one of the closure delegates with another class object.
Now this closure should take no parameters or multiple parameters and inside code it should access passed delegated object methods
suppose
class Foo {
public boolean verifyName(String name);
public boolean verifyNameAndType(String name, PersonType type);
public boolean verifyNameAndTypeAndAge(String name, PersonType type, int age);
}
class Bar {
def getNames = { String name ->
if (verifyName(name)){
// do something
}
};
def getNames = { String name, PersonType personType ->
if (verifyNameAndType(name, personType)) {
// do something
}
}
def getNames = { String name, PersonType personType, int age ->
if (verifyNameAndTypeAndAge(name, personType, age)) {
// do something
}
}
Foo foo = new Foo()
Bar bar = new Bar();
bar.delegate = foo;
Closure NAME = bar.getNames;
NAME closure is available to user where he types
NAME('shakira');
NAME('affan', DOCTOR);
NAME('siddique', TEACHER, '45455555');
base on parameter it should call specific closure but it seems multiple closure with same name is not allowed.
also user can provide null values inside parameters but still it will call specific closure even if it is null
e.g NAME('shakira', null) should call exact closure getNames(name, personType)
I have already checked this url but my logic will not cover my logical part where User provides null parameters inside method
Groovy Closure with parameters
Upvotes: 1
Views: 801
Reputation: 28564
you can't define several variables with the same name in one class,
however you can define several methods with one name but with different parameters
so your code could look like this:
class Foo {
public boolean verifyName(String name){println 'verifyName'}
public boolean verifyNameAndType(String name, String type){println 'verifyNameAndType'}
public boolean verifyNameAndTypeAndAge(String name, String type, int age){println 'verifyNameAndTypeAndAge'}
}
class Bar {
@Delegate Foo delegate
def getNames ( String name ){
println '1'
verifyName(name)
}
def getNames (String name, String personType ){
println 2
verifyNameAndType(name,personType)
}
def getNames (String name, String personType, int age ){
println 3
verifyNameAndTypeAndAge(name,personType,age)
}
}
Foo foo = new Foo()
Bar bar = new Bar(delegate:foo);
Closure NAME = bar.&getNames; // &methodName returns a method closure
//NAME closure is available to user where he types
NAME('shakira');
NAME('affan', 'DOCTOR');
NAME('siddique', 'TEACHER', 45455555);
Upvotes: 3