微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用LambdaMetaFactory公开getter会导致类强制转换异常

如何解决使用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 举报,一经查实,本站将立刻删除。