我有一个场景,其中两个函数完全相似,但两者中使用的Class对象不同,类似这样,
template<class ImmutableLambda>
void call_yield(ImmutableLambda&& c)
{
using Fun_t = typename Fun_Type<decltype(&ImmutableLambda::operator())>::type;
yield(Fun_t{std::forward<ImmutableLambda>(c)});
}
和其他功能类似,
int main() {
call_yield(
[](char) -> void {}
);
}
如何在上述对象中使用泛型对象的泛型类?我还没有使用过泛型。
答案 0 :(得分:6)
如果您希望您的方法使用inputObject
类的任何属性,则可以传递一个返回给定inputObject
实例的必需属性的函数接口:
public <T> int function(inputObject input, Function<inputObject,T> func) {
T obj = func.apply(input);
PropertyUtils.setProperty(obj, input.getKey(), input.getValue());
return 0;
}
现在您可以使用
调用此方法function(input,inputObject::getLeadMaster);
或
function(input,inputObject::getDealMaster);
答案 1 :(得分:0)
您可以简单地将方法重新定义为:
public int function1(inputObject input, boolean lead){
if(lead) {
LeadMaster lead= input.getLeadMaster();
PropertyUtils.setProperty(lead, input.getKey(), input.getValue());
} else {
DealMaster deal= input.getDealMaster();
PropertyUtils.setProperty(deal, input.getKey(), input.getValue());
}
return 0;
}
答案 2 :(得分:0)
首先更改inputObject
。
写方法
input.getMaster(Object object)
input.setMaster(Object object),用于设置和获取通用对象。
您可以将LeadMaster
和DealMaster
设置为一般。
编写一个抽象类或使用一个扩展到具有function1
和function2
的类的超类。
在抽象或超类中使用您在inputObject
public int function(inputObject input){
PropertyUtils.setProperty(input.getMaster, input.getKey(), input.getValue());
return 0;
}