如何解决使用LambdaMetaFactory公开getter会导致类强制转换异常
我正在使用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 举报,一经查实,本站将立刻删除。