我有一个脚本,其中一个闭包委托另一个类对象。
现在,此闭包不应包含任何参数或多个参数,并且应在内部代码中访问传递的委托对象方法
假设
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');
应根据参数调用特定的闭包,但似乎不允许使用多个同名闭包。
用户还可以在参数内部提供null值,但即使它为null,它仍然会调用特定的闭包
e.g NAME('shakira', null) should call exact closure getNames(name, personType)
我已经检查了此url,但是我的逻辑不会覆盖用户在方法内部提供空参数的逻辑部分
答案 0 :(得分:2)
您不能在一个类中定义多个具有相同名称的变量
但是您可以使用一个名称但使用不同的参数定义几种方法
因此您的代码应如下所示:
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);