键入擦除和类型检查

时间:2017-03-10 16:56:28

标签: java reflection

我正在使用反射进行一些映射。这是我的代码中的瓶颈,所以我的目标是提高性能。我为构建器设置器创建了以下方法:

private static <T, R, S> BiFunction<T, R, S> createBuilderSetter(Method builderSetterMethod) {
    try {
        builderSetterMethod.setAccessible(true);
        MethodHandles.Lookup lookup = MethodHandles.lookup();
        MethodHandle mh = lookup.unreflect(builderSetterMethod);
        return (BiFunction<T, R, S>) LambdaMetafactory.metafactory(lookup, "apply", MethodType.methodType(BiFunction.class), mh.type().generic(), mh, mh.type())
            .getTarget()
            .invokeExact();
    } catch (Throwable t) {
        throw new IllegalStateException(t);
    }
}

正在使用类似的东西:

BiFunction<MyType.Builder, Object, MyType.Builder> setter = createBuilderSetter(...);

我的问题是围绕中间通用类型Object。这是一个通用的setter(众多之一),我不知道编译时的类型。 JVM是否会进行任何额外的类型检查,而不仅仅是通常会做什么,这会减慢我的速度?如果是这样,我的解决方案可以改进吗?

0 个答案:

没有答案