首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在java8中将方法的可见性/可访问性限制到子包?

如何在java8中将方法的可见性/可访问性限制到子包?
EN

Stack Overflow用户
提问于 2020-05-06 03:42:57
回答 1查看 72关注 0票数 0

我想知道,在Java 8中,是否有任何选项可以将方法的可见性/可访问性限制为子程序包?

例如,如果我在abc包中有一个类A的print()方法。现在,如何将该方法限制为只能在abc的子包中访问,如abc.def或abc.def.ijk等。

EN

回答 1

Stack Overflow用户

发布于 2020-05-06 19:12:52

这种语言中没有这样的特性。实现此目的的一种选择是将操作封装到公共类型中,并小心地将其发布到预期的包中。例如。

代码语言:javascript
运行
复制
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");
    }
}
代码语言:javascript
运行
复制
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实例分发给不受信任的代码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61621683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档