【问题标题】:Assign a value to an attribute of a generic method of a generic class - Java为泛型类的泛型方法的属性赋值 - Java
【发布时间】:2017-11-24 04:44:18
【问题描述】:

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

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”的类,它有一个 NOT STATIC 方法“setColor()”。 我的通用方法应该返回 Car 的一个 istance,比如说“myCar”,并在属性“color”处分配值“red”

myCar.setColor("red"); 

我的通用方法可以用类似的方式调用:

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

问题:我不知道如何编写该方法...

【问题讨论】:

  • 使用反射怎么样?它至少会尽可能通用。
  • 对象是一个非常简单的类的实例,比如说“汽车”,它有一个属性 color,一个方法 getColor()、setColor()、一个属性模型和一个方法 getModel ()、setModel() 等...然后我将有其他简单的类,例如“Bycicle”,它有一个属性“type”,方法是 'setType(9' 和 'getType()' .等等与其他类...
  • 我不是很专业,我也不是很懂……请你写代码好吗?
  • 我会避免反思,它会给 Proguard 带来问题......

标签: java lambda


【解决方案1】:

你很亲密。您需要两种通用类型:对象(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 是没有意义的。它与方法调用之前的对象相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2011-10-08
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多