关于lambda$造成反射出错的问题
今天在Java中使用了List转Array的一个特性
list.toArray(String[]::new)
原先的写法是
list.toArray(new String[0])
问题出现了,我在使用反射调用这个类的函数时,报错了
timelinedeal.TimeLineFilter with modifiers "private static"
嗯?我以为是我调错方法了,不过看了之后,我确实调用的是 getDeclaredMethods 。这就奇了怪了,我写的类里没有私有方法。于是我打印了一下类的方法

多了一个lambda$开头的方法,我知道这是框架或者JDK在编译的时候加入的东西,看了后面的函数名称,我明白了原来使用了 String[]::new 后,会在类中生成一个私有的方法。
知道了原因后,修改就很容易了。两种方法
-
直接换回 new String[0] (不推荐)问题在反射这边,因为我通常是希望调用public方法,将来万一框架或者JDK又添加了一些其他函数在类中,还是会出错。
-
将条件限制为调用public方法。
if (method.getModifiers() != Modifier.PUBLIC) {
continue;
}

浙公网安备 33010602011771号