我想知道,在Java 8中,是否有任何选项可以将方法的可见性/可访问性限制为子程序包?
例如,如果我在abc包中有一个类A的print()方法。现在,如何将该方法限制为只能在abc的子包中访问,如abc.def或abc.def.ijk等。
发布于 2020-05-06 19:12:52
这种语言中没有这样的特性。实现此目的的一种选择是将操作封装到公共类型中,并小心地将其发布到预期的包中。例如。
package abc;
import java.util.function.Consumer;
import abc.def.B;
import java.lang.Objects;
public class A {
public static Consumer<A> getPrintAccess(B.AccessToken token) {
Objects.requireNonNull(token);
return A::print;
}
private void print() {
System.out.println("privileged action");
}
}package abc.def;
import abc.A;
public class B {
public static class AccessToken {
/* non-public */ AccessToken() {}
}
void someMethod(A object) {
A.getPrintAccess(new AccessToken()).accept(object);
}
}虽然方法getPrintAccess是公开可见的,但它将只授予能够实例化abc.def.B.AccessToken的代码访问权限。因为它的构造函数是包私有的,所以只有包abc.def中的代码可以这样做。当然,该包中的代码不得将AccessToken实例分发给不受信任的代码。
https://stackoverflow.com/questions/61621683
复制相似问题