我有一个 lambda 表达式,其中我使用 UnaryOperator 将字符串值转换为大写(如果不为空):
public static final UnaryOperator toUpperCase
= (str -> str == null ? str : str.toString().toUpperCase());
然后我在方法中使用此运算符并传入对象、getter 和 setter。使用这些参数,我可以获得对象(字符串),将字符串大写,然后将字符串设置为值:
public static final void convertToUpper(Object1 object1, Function<Object1, String> getter,
BiConsumer<Object1, String> setter) {
setter.accept(object1, toUpperCase.apply(getter.apply(object1)).toString());
}
但是,对于我想要进行此转换的每个对象,我都必须创建另一个具有不同对象参数的 convertToUpper
方法。有没有办法让这个方法更通用,并允许传入任何对象、getter 和 setter。我遇到的问题是 getter/setter 不是静态的,没有对象声明就不能引用。
最佳答案
您可以使 convertToUpper
成为通用方法:
public static final <T> void convertToUpper(T object1, Function<? super T, String> getter,
BiConsumer<? super T, String> setter) {
setter.accept(object1, toUpperCase.apply(getter.apply(object1)).toString());
}
您可以传入任何对象、getter 和 setter,只要该 getter 和 setter 可以应用于该类型的对象即可。
关于对象中大写字符串值的 Java Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43456657/