8u201:lambda传递package-private参数时,方法引用引发IAE

时间:2019-01-22 10:09:22

标签: java java-8

我遇到了可以很好地编译的代码,但是如果使用方法引用而不是lambda,则会在运行时抛出IllegalAccessError

该代码涉及使用不可见的package-private类作为公共类中公共方法的参数类型。

这样的设计在将来的Java版本中应该避免吗? (或者仅仅是当前版本中的错误?(8u201))

最小代码如下:

package1 / Test.java:

package package1;

import java.util.function.Predicate;

import package2.Child;

public class Test {

    public static void main(String[] args) {

        Predicate<Child> p1 = x -> Child.check(x);
        p1.test(new Child()); // Passes

        Predicate<Child> p2 = Child::check; // <-- This line throws IAE
        p2.test(new Child());
    }
}

package2 / Child.java:

package package2;

class Base {
}

public class Child extends Base {

    public static boolean check(Base base) {
        return true;
    }
}

(此代码是最少的,并且没有语义意义。)

0 个答案:

没有答案