gpt4 book ai didi

java - 如何在 Java 中的两个包之间共享包私有(private)数据?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:06:56 24 4
gpt4 key购买 nike

我有 2 个 Java 包,A 和 B。假设包 B 中的一些类想要使用包 A 中的一些类,但是,当开发人员出现并开发包 C(或者说,应用程序 C)时,他/她将使用我的包 B,但我希望他/她能够使用 B 正在使用的 A 中的类。也就是说,我希望包 A 中的类是包私有(private)的,这样它们对应用程序开发人员是隐藏的。但是,我确实希望我自己的包 B 能够访问那些包私有(private)的类。这可以用 Java 完成吗?我基本上只需要硬着头皮公开这些类,只希望用户不要尝试使用它们吗?或者,我是否需要在 B 中复制 A 中的类?

我的偏好是不是 hack-y 的东西(即我不想使用反射)。帮忙?

最佳答案

您可以使用 JDK 8 来完成及其 Project Jigsaw .您可能想看看 Project Jigsaw Quickstart Guide .

不幸的是,Jigsaw 是 JDK8 的一部分,它还没有完全准备好。预计功能不完整 until January 2013并且不会在 2013 年年中之前发布。

但是,您已经可以使用 JDK 8 预览版编译您的类并实现您的想法。

在这种情况下,您的问题可以通过将您的应用程序划分为独立的模块来解决。你可以这样做:

module foo {
exports foo;
permits bar;
permits baz;
}

这里只有名为 bar 或 baz 的模块才需要模块 foo。来自某个其他名称的模块对 foo 的依赖在编译时、安装时或运行时将无法解析。如果不存在许可条款,则不存在此类约束。

不确定是否有像 OSGI 这样的替代框架,您可以在 Apache Felix 中找到实现和 Eclipse Equinox提供某种功能来实现这些级别的封装。您可能想要对此进行一些调查。

OSGi 的问题如果 Jigsaw 不存在,框架强制执行的任何规则都可以通过反射来打破,但是一旦 Jigsaw 准备好供公众使用,这些规则将由 Java 本身强制执行,正如您在上面读到的那样,在编译时、运行时和安装时时间。

关于java - 如何在 Java 中的两个包之间共享包私有(private)数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10989881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com