gpt4 book ai didi

java - 将 Java 8 Lambda 与注解相结合

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:06:55 25 4
gpt4 key购买 nike

考虑以下代码:

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”注释的方法,然后以某种方式将这些方法添加到供应商列表中。有什么办法可以做到吗?如何?谢谢。

最佳答案

您可以按照您的建议使用反射并检查注释并为每个方法创建供应商。

Person p = ...
for (Method m : Person.class.getMethods())
if (m.getAnnotation(NameMethod.class) != null)
suppliers.add(() -> {
try {
return m.invoke(p);
} catch (Exception e) {
throw new AssertionError(e);
}
});

关于java - 将 Java 8 Lambda 与注解相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35314563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com