使用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 (将#修改为@)