我正在使用反射进行一些映射。这是我的代码中的瓶颈,所以我的目标是提高性能。我为构建器设置器创建了以下方法:
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是否会进行任何额外的类型检查,而不仅仅是通常会做什么,这会减慢我的速度?如果是这样,我的解决方案可以改进吗?