为泛型类的泛型方法的属性 - Java分配值

时间:2017-11-23 18:43:14

标签: java lambda

我需要一个泛型方法来为泛型类的属性赋值;我将举一个例子来更好地解释。我想我需要的方法应该是这样的:

import java.util.function.Function;
public class Utilities {

 public static <T> Object assignValueToAttribute( Object MY_Object__Arg, Function<T, ?> MY_AttributeValueExtractor_Arg, Object MY_AttributeValueToEqual_Arg) {
    return ....
} 

}

实施例

让我们说我有一个名为“Car&#39;使用NOT STATIC方法&#39; setColor()&#39;。 我的通用方法应该返回Car的等值,让我们说'myCar&#39;,然后分配值&#34; red&#34;在属性&#39;颜色&#39;

myCar.setColor("red"); 

我的泛型方法可以用类似的东西调用:

Car myCar= (Car) Utilities.assignValueToAttribute(myCar, oggetto -> oggetto.setColor(), "red");

问题:我不太了解该方法的代码......

1 个答案:

答案 0 :(得分:2)

你很亲密。您需要两种泛型类型:对象(bean)的类型和值的类型。你想要一个BiConsumer,而不是一个函数,因为set-method不返回任何东西。

public static <T, V> T assignValueToAttribute(T obj, BiConsumer<T, V> attributeSetter, V value) {
    attributeSetter.accept(obj, value);
    return obj;
}

然后您可以将其调用为:

assignValueToAttribute(myCar, Car::setColor, "red");

请注意,重新分配myCar毫无意义。它与方法调用之前的对象相同。