我有一个lambda表达式,我在其中使用UnaryOperator将字符串值转换为大写,如果不是null:
public static final UnaryOperator toUpperCase
= (str -> str == null ? str : str.toString().toUpperCase());
然后我在方法中使用此运算符并传入Object,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。我遇到的问题是getters / setter不是静态的,如果没有它们的对象声明就不能引用。
答案 0 :(得分:1)
您可以将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。