是否可以将对方法的引用作为参数传递?
例如:
public static void main(String[] args) {
String data = "name: John, random text, address: leetStreet";
Person person;
//if regex matches, use method reference, to send the result.
applyDataToPerson(data, "name: (\\w+)", person, Person::setName);
applyDataToPerson(data, "address: (\\w+)", person, Person::setAddress);
}
private static void applyDataToPerson(String data, String regex, Person person,
Function<Person> f) {
Matcher match = Pattern.compile(regex).matcher(data);
if (match.matches()) person.f(match.group(1));
}
class Person {
private String name;
private String address;
public void setName(String name) {
this.name = name;
}
public void setAddress(String address) {
this.address = address;
}
}
如果不是,那么提供引用方法的替代方法是什么?开关盒构造?
我认为您正在寻找BiConsumer
:
private static void applyDataToPerson(String data, String regex, Person person, BiConsumer<Person, String> action) {
Matcher match = Pattern.compile(regex).matcher(data);
if (match.matches()) action.accept(person, match.group(1));
}
另外,您可以缩短方法签名,并使用单个参数Consumer
来捕获您的person
引用:
public static void main(String[] args) {
String data = "name: John, random text, address: leetStreet";
Person person;
//if regex matches, use method reference, to send the result.
applyData(data, "name: (\\w+)", person::setName);
applyData(data, "address: (\\w+)", person::setAddress);
}
private static void applyData(String data, String regex, Consumer<String> action) {
Matcher match = Pattern.compile(regex).matcher(data);
if (match.matches()) action.accept(match.group(1));
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句