Можно ли передать ссылку на метод в качестве параметра?Передача ссылок функций как параметров
Например:
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;
}
}
Если нет, то что было бы альтернативой дать ссылку на метод? Конструкция коммутационного корпуса?
В Java 8 вы можете [передать ссылки метода] (https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html) на существующие методы (между прочим) – Tibrogargan
@Tibrogargan, как бы выглядела подпись метода? 'Компаратор super T>' для меня не имеет смысла. – JasperJ
Что означает 'Function', который должен представлять? Если мы говорим о ['java.util.function.Function'] (https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html), у него есть 2 общие типы, а не 1. Так что код не может скомпилироваться для начала ... (не говоря уже о 'person.f (...)'). Перед запросом _alternatives_, убедитесь, что у вас есть рабочий код ... –
Tunaki