Учитывая следующий код:Объединение Java 8 Lambda с аннотациями
public class MyTest {
public void sayHello(Supplier<String> myGetter) {
System.out.println("Hello " + myGetter.get());
}
public static void main(String[] args) {
Person person = new Person("Michal", "Lefler");
MyTest myTest = new MyTest();
List<Supplier<String>> suppliers = new ArrayList<>();
suppliers.add(person::getName);
suppliers.add(person::getLastName);
suppliers.forEach(myTest::sayHello);
}
static class Person {
private String name;
private String lastName;
public Person(String name, String lastName) {
this.name = name;
this.lastName = lastName;
}
@NameMethod
public String getName() {
return name;
}
@NameMethod
public String getLastName() {
return lastName;
}
public String getBlahBlah() {
return "BlahBlah";
}
public String getPakaPaka() {
return "PakaPaka";
}
}
@interface NameMethod {}
}
Мой вопрос: Вместо заполнения поставщиков список в явном виде:
suppliers.add(person::getName);
suppliers.add(person::getLastName);
Я хотел бы, чтобы заполнить список поставщиков автоматически , используя аннотацию «@NameMethod». Я имею в виду, что я хотел бы отсканировать все аннотированные методы «@NameMethod», используя отражение, а затем как-то добавить эти методы в список поставщиков. Есть ли способ, которым я могу это сделать? Как? Спасибо.
Вы уже подумали об этом и нашли приемлемое решение, и в чем же проблема? Что блокирует вас от написания кода? –
Я * не нашел решение. Что заставляет вас думать, что я это сделал? Я не знаю, как объединить аннотацию @NameMethod с лямбда-выражениями. –
Да, вы сделали: «Я бы хотел отсканировать все аннотированные методы @NameMethod, используя отражение, а затем как-то добавить эти методы в список поставщиков». Это решение. Опять же, что блокирует вас от кодирования? Вот о чем должен быть ваш вопрос: что мешает вам идти дальше. –