相关疑难解决方法(0)

Java8从类中检索lambda setter

我正在尝试为私有字段的setter获取lambda方法句柄,但由于某种原因,无法找到setter.

这是我正在使用的功能界面:

@FunctionalInterface
public interface ISetter<T, R> {
    void set(T object, R value);
}
Run Code Online (Sandbox Code Playgroud)

这是用于获取setter的方法:

public ISetter getSetter(Class clazz, String fieldName, Class fieldType) throws Throwable {

    MethodHandles.Lookup caller = MethodHandles.lookup();
    MethodType setter = MethodType.methodType(Void.class, fieldType);
    MethodHandle target = caller.findVirtual(clazz, computeSetterName(fieldName), setter);
    MethodType func = target.type();

    CallSite site = LambdaMetafactory.metafactory(
            caller,
            "set",
            MethodType.methodType(ISetter.class),
            func.generic(),
            target,
            func
    );

    MethodHandle factory = site.getTarget();
    ISetter r = (ISetter) factory.invoke();

    return r;
}
Run Code Online (Sandbox Code Playgroud)

按照惯例,所有的setter都是相同的:"setField(...)".这是我的测试类:

public class TestEntity {

    private Long id;


    public TestEntity(Long id) { …
Run Code Online (Sandbox Code Playgroud)

java reflection lambda java-8

8
推荐指数
1
解决办法
792
查看次数

标签 统计

java ×1

java-8 ×1

lambda ×1

reflection ×1