问题描述
我正在使用LambdaMetaFactory公开吸气剂。我有一个包含许多字段的POJO,但我不知道将要填充哪些字段。我试图避免同时扩展if语句和反射。
这是我的POJO中的摘录:
@Data
@Builder
public class MyPojo {
private String email;
private String firstName;
private String lastName;
private String zipCode;
private String city;
private String street;
private String country;
...
}
public static String getValueFromGetterMethodName(String fieldName,MyPojo myPojo) {
String methodName = constructGetterMethodName(fieldName);
final MethodHandles.Lookup lookup = MethodHandles.lookup();
MethodType getChangeDataMethodType = methodType(String.class,MyPojo.class);
try {
final CallSite site = LambdaMetafactory.Metafactory(lookup,"apply",methodType(Function.class),methodType(Object.class,Object.class),lookup.findVirtual(MyPojo.class,methodName,methodType(String.class)),getChangeDataMethodType);
Function<MyPojo,String> getterFunction = (Function<MyPojo,String>) site.getTarget()
.invokeExact();
return getterFunction.apply(myPojo);
}
catch (Throwable e) {
log.error("Error getting getter method ref: " + e.getMessage());
e.printstacktrace();
}
return null;
}
问题在于此行:
Function<MyPojo,String>) site.getTarget()
.invokeExact();
产生未检查的类强制转换警告。我知道我们应该避免这些。此代码效果很好。我不确定如何更改它以避免类强制转换异常。 CallSite不接受参数。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)