Java中如何在两个包之间共享包私有数据?

2024-04-01

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

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


你可以这样做JDK 8 http://jdk8.java.net/jigsaw/和它的拼图项目 http://cr.openjdk.java.net/~mr/jigsaw/notes/jigsaw-big-picture-01。您可能想看看拼图项目快速入门指南 http://openjdk.java.net/projects/jigsaw/doc/quickstart.html.

不幸的是,Jigsaw 是 JDK8 的一部分,而且还没有完全准备好。预计功能不会完整直到 2013 年 1 月 http://mail.openjdk.java.net/pipermail/jdk8-dev/2012-April/000942.html并且不会在 2013 年年中之前发布。

但是,您已经可以使用 JDK 8 预览版编译您的类并让您的想法发挥作用。

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

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

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

不确定是否有替代框架OSGI http://en.wikipedia.org/wiki/OSGi,您可以在其中找到实现阿帕奇菲利克斯 http://felix.apache.org/site/index.html and 日食春分 http://www.eclipse.org/equinox/提供某种功能来实现这些级别的封装。您可能想对此进行一些调查。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中如何在两个包之间共享包私有数据? 的相关文章

  • 我们可以实例化一个抽象类吗?

    在一次采访中 有人问我 我们是否可以实例化一个抽象类 我的回答是 不 我们不能 但是 面试官告诉我 错了 我们可以 我对此争论了一下 然后他告诉我自己在家尝试一下 abstract class my public void mymethod
  • 将数据传递到表单时的重定向后获取?

    我有几个场景 servlet 需要将数据从数据库检索到的记录传递到 JSP 中的表单 目前 我将此信息存储在请求中 使用 RequestDispatcher 转发到页面 一切都很好 然而 这不符合 PRG 模式 AFAIK 并且当然意味着刷
  • 在循环中使用 if 语句? - 加工

    假设我必须在 for 循环中使用 if 语句 并且 for 循环在特定条件下触发 而 if 语句仅在 for 循环达到特定阶段时触发 例如 条件是一个计数器 当发生特定事件 例如球从屏幕上掉下来 时 该计数器会进行计数 每次球穿过屏幕时 都
  • Java如何从字符串实例化一个类[重复]

    这个问题在这里已经有答案了 可能的重复 在 Java 中从变量创建新类 https stackoverflow com questions 1268817 create new class from a variable in java 我
  • “错误:无法找到或加载主类 org.apache.hadoop.util.RunJar”是什么意思?

    我正在尝试运行一个示例 因为它指出 Hadoop 实践 一书 http www manning com lam 第 15 页 这是需要运行的命令 bin hadoop jar hadoop examples jar 但我收到这个错误 Err
  • 在 Java 中对多语言环境字符串进行排序

    我正在尝试按字符串字段 国家 地区 对对象列表进行排序 每个国家 地区都使用其母语 阿根廷 澳大利亚 奥地利 例如 我想要做的是让 出现在 A 国家之后 因为字母 对应于拉丁语 B 我正在尝试使用默认的 Collat er 但非拉丁名称仍然
  • python下安装xgboost 32位msys失败

    尝试安装 xgboost 失败 Windows 和企业版版本为 Anaconda 2 1 0 64 位 我该如何继续 我一直在使用 R 似乎从 RStudio 在 R 中安装新包相当容易 但在间谍程序中则不然 因为我需要进入命令窗口来执行此
  • Java SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'") 给出时区作为 IST

    我有 SimpleDateFormat 构造函数作为 SimpleDateFormat yyyy MM dd T HH mm ss Z 我正在解析字符串 2013 09 29T18 46 19Z 我读到这里 Z 代表GMT UTC时区 但是
  • 返回 Consumer 表达式内的 Method 值

    我试图在方法中返回一个布尔值 并且我正在使用消费者函数 有什么方法可以直接在 Consumer 表达式中返回该值吗 这是代码 private static boolean uuidExists UUID uuid MySQL getResu
  • Spring WebFlux:在 Spring Data MongoDB 反应存储库中的 null 值时发出异常?

    我正在尝试学习如何使用 MongoDB 反应存储库spring boot 2 0 0 M2 但我担心我没有按预期做事 这是我的方法之一 试图找到一个User通过他们的电子邮件 但如果没有 该方法应该抛出异常 Override public
  • Java 相当于 C# 的 async/await?

    我是一名普通的 C 开发人员 但偶尔也会使用 Java 开发应用程序 我想知道 Java 中是否有相当于 C async await 的东西 简单来说 java 相当于 async Task
  • 如何在使用 Web 服务时获取会话对象?

    如何在使用 Web 服务时获取会话对象 服务在两个程序之间调用 如何在使用 Web 服务时获取用户会话对象 不可能使用请求对象获取会话 因为当我们谈论服务时不会有请求或响应 如果您正在与JAX WS https jax ws dev jav
  • 可以明确声明包依赖项的版本吗?

    我倾向于对我编写的代码进行明确而不是隐含的描述 因此 在成功创建自己的包之后 我立即想到的下一件事是如何最好地确保代码的健壮性和可靠性 其中一部分与我的包所依赖的包有关 实际问题 在这方面 是否可以明确声明需要 期望哪个版本的包依赖项 我正
  • Java 有现成的时钟同步解决方案吗?

    我们有一个大型的高性能软件系统 它由多个交互的 Java 进程 不是 EJB 组成 每个进程可以在同一台机器上 也可以在不同的机器上 某些事件在一个进程中生成 然后以不同的方式传播到其他进程以进行进一步处理等 出于基准测试的目的 我们需要创
  • JavaFX:在 WebView img 标签中未加载本地图像

    以下是我的代码 一切安好 我可以加载远程页面 我可以放置 HTML 内容 但我的img标签显示一个X标志表示无法加载图像 Note 我的图像与类位于同一个包中JavaFX在 Smiley 文件夹中 我可以列出所有图像 这意味着路径没有问题
  • 线程缓存和 Java 内存模型

    我正在尝试了解 Java 内存模型和线程 据我了解 每个线程都有 主 内存的本地副本 因此 如果一个线程尝试更改int变量 例如某个对象的变量 它会缓存int变量 如果它更改它 其他线程可能看不到更改 但是如果线程缓存一些对象而不是 int
  • 使用 JavaFX 和 Maven 将模块描述符添加到库中[重复]

    这个问题在这里已经有答案了 我需要使用反思 https github com ronmamo reflections在一个带有 JavaFX 的 Maven 项目中 我想使用jlink捆绑一个最小的 JRE 问题是我运行时出现以下错误mvn
  • 使用 Maven 将值附加到文件中

    我想在文件末尾附加一个值 但我无法确定要使用哪个插件 例子 我要附加的值 myValue file value1 value2 myValue 追加后 我知道我可以使用 antrun plugin 来做到这一点 但是可以使用 Maven 插
  • JPanel 无法使用 setSize 和 setPreferedSize

    请解释为什么它不起作用 您也可以发布解决方案来解决此问题 非常感谢您提前 public class Run extends JFrame Fields static JPanel jpanel private int x y Constru
  • 数组所有可能的组合

    我有一个字符串数组 ted williams golden voice radio 我希望这些关键字的所有可能组合采用以下形式 ted williams golden voice radio ted williams ted golden

随机推荐

  • PHP If/Else 参数和 PDO 对象

    我怎样才能用下面的 if else 来论证 我想将变量 condition 定义为表 A 和表 B 的交集 最终 如果该条件为真 则执行一些代码 这是我的 PHP 我试图匹配 table1 field1 和 table2 field1 如果
  • 如何在 Airflow 中安装软件包?

    我在 Airflow 在 GCP 上 部署了一个 dag 但收到错误 没有名为 scipy 的模块 如何在 Airflow 中安装软件包 我尝试添加一个单独的 DAG 来运行 def pip install package subproce
  • 统一码正则表达式;无效的 XML 字符

    有效的 XML 字符列表是众所周知的 正如规范所定义的 x9 xA xD x20 xD7FF xE000 xFFFD x10000 x10FFFF 我的问题是是否可以通过使用 Unicode 通用类别来为此 或其逆 创建 PCRE 正则表达
  • 让mysql忽略where条件

    如果未设置变量 是否可以使 mysql 忽略条件 例如 SELECT FROM foo WHERE id id AND bar baz 如果 baz 设置为正常运行查询 否则运行减去 AND 子句的查询 Thanks SELECT FROM
  • 将数据分割或子集为 30 分钟的间隔

    我有以下形式的数据框 Temp Depth Light x time date time at depth 104 18 59 2 7 27 21 38 2012 06 20 4 109 18 59 2 7 27 22 02 2012 06
  • 如何使用google api抓取数据

    import requests def search query pages 4 rsz 8 url https ajax googleapis com ajax services search web params v 1 0 Versi
  • 如何使用php下载rar文件

    我编写了下载 rar 文件的代码 它工作正常 但是 name file rar data file get contents file rar fh fopen name w or die can t open file fwrite fh
  • 从 Materialise CSS 芯片获取数据

    我需要从 Materialise CSS 获取数据chips https materializecss com chips html 但我不知道 如何 chips placeholder material chip placeholder
  • asp.net webforms 和 jquery:如何在回发之间保存/恢复 jquery 状态?

    我正在构建一个 asp net webforms 3 5 sp1 应用程序 使用 jquery 可以对 UI 进行动画处理 更改其状态 在我开始进行回发之前 它一直工作得很好 其中 UI 显然将自身重置为初始状态 所以我的问题是 在回发之间
  • 以编程方式更改 Sustainsys.Saml2 HttpModule 配置

    我有一个遗留的 Web Forms ASP Net 项目 我刚刚成功集成了该项目Sustainsys Saml2 https saml2 sustainsys com en stable index html 我想知道如何以编程方式进行配置
  • 翻转 Quicktime 预览和捕获

    我需要水平翻转我正在预览和捕获的一些视频 A la iChat 我有一个网络摄像头 希望它看起来就像用户正在照镜子一样 我正在预览 Quicktime 视频QTCaptureView 我的捕获是逐帧完成的 出于我不会详细介绍的原因 如下所示
  • 在 JavaScript 中搜索数组

    我需要对数据集进行排序 如您所见 我已将其分配给记录变量 根据该数据 我需要查看邮政编码是否存在 如果邮政编码不存在 那么我需要将其移动到数组中 当然会有重复项 并继续检查其余记录 如果它确实存在 我不需要执行任何操作 Declare Ar
  • 在主 Django 数据库上运行 Unittest

    我正在寻找一种在 django 测试期间运行完整 celery 设置的方法 在此询问其他问题 https stackoverflow com questions 20638751 run a celery worker that conne
  • AngularJS + Phantom 的开放图问题

    我正在运行一个设置AngularJS http angularjs orgAJAX 应用程序 并使用PhantomJS http phantomjs org 和Angular seo https github com steeve angu
  • MediaRecorder.stop() 不会清除选项卡中的录制图标

    我启动和停止 MediaRecorder 流 红色 录制 图标会在启动时出现在 Chrome 选项卡中 但在停止时不会消失 图标如下所示 我的代码如下所示 const mediaRecorder new MediaRecorder stre
  • StringTemplate 和 FreeMarker 之间的主要区别是什么?

    网上似乎充满了 Velocity 和 FreeMarker 之间的比较 而且它们似乎相当等效 但StringTemplate和FreeMarker之间似乎几乎没有可比性 那么 StringTemplate 和 FreeMarker 之间的主
  • Visual Studio Code 和 Jinja 模板

    我有一段时间使用 VS code 和一些扩展 当我使用 Flask 时 一切都很完美 Prettier 将所有 Flask 代码粘合在一起 并且智能感知不适用于 Flask 代码 extends layout html block styl
  • Pandas 从多索引级别获取所有值

    给定以下数据透视表 df pd DataFrame A a a a a a b b b b B x y z x y z x y z C a b a b a b a b a D 7 5 3 4 1 6 5 3 1 table pd pivot
  • 除了 excel.php 配置文件之外,如何更改 Laravel 5.2 的 maatwebsite 的 laravel excel 包 2.0.8 的 startRow ?

    我正在尝试使用 maatwebsite 的 laravel excel 包 2 0 8 for Laravel 5 2 导入 excel 文件 我希望能够更改控制器内的 startRow 而不是配置内的 startRow 这样它就不会影响每
  • Java中如何在两个包之间共享包私有数据?

    我有 2 个 Java 包 A 和 B 假设包 B 中的某些类想要使用包 A 中的某些类 但是 当开发人员出现并开发包 C 或者说应用程序 C 时 他 她将使用我的包 B 但我do not希望他 她能够使用 B 正在使用的 A 中的类 也就