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中如何在两个包之间共享包私有数据? 的相关文章

  • 在 Java Swing 中检测 JScrollPane 上的 mouseClick 事件

    如果我有这样的东西 我可以使用布尔标志 performAdjustment 控制自动滚动 static boolean performAdjustment true JTextArea textArea new JTextArea JScr
  • 如何使用 SLF4J 和 Log4j2 记录 FATAL(或任何自定义日志级别)

    我有那些具体的要求 需要能够登录FATAL level 需要使用SLF4J 需要使用Log4j2 现在 这是我的执行 final Logger logger LoggerFactory getLogger HelloWorld class
  • 以编程方式将 PEM 证书导入 Java KeyStore

    我有一个由两个文件 crt 和 key 组成的客户端证书 我希望将其导入到 java KeyStore 中 然后在 SSLContext 中使用 以通过 Apache 的 HTTPClient 发送 HTTP 请求 但是 我似乎找不到一种以
  • 使用 jdbc 程序连接到 Open Office odb 文件

    我编写了以下代码来连接到 OpenOffice db String db C Documents and Settings hkonakanchi Desktop Test odb Class forName org hsqldb jdbc
  • JUnit 使用 Mockito 测试异步方法

    我已经使用 Spring Framework 版本 5 0 5 RELEASE 在 Java 1 8 类中实现了异步方法 public class ClassToBeTested Autowired private MyComponent
  • 如何在Spring的applicationContext.xml中指定默认范围来请求范围?

    我想让所有 bean 请求默认作用域 但是 Spring 文档说默认作用域是 Singleton 第 3 4 1 和 3 4 2 节http static springsource org spring docs 2 5 x referen
  • JUnit Eclipse 显示 System.out.print() 的

    我正在使用 JUnit 3 和 Eclipse 3 4 当我运行 JUnit 测试用例时 一切正常并且测试完美完成 唯一的事情是我想查看我正在运行的类的输出 所有类都具有一些输出值的基本 System out print 因此 当我运行测试
  • 在气球内显示带有照片的多个地标的最佳做法是什么?

    我有一个项目如下 从手机上拍摄几张照片 将照片保存在网络系统中 然后将照片显示在其中的谷歌地球上 我读过很多文章 但它们都使用 fetchKml 我读过的一篇好文章是使用 php 但使用 fetchKml 我不知道是否可以使用 parseK
  • 无法从后台服务通过 WiFi 访问互联网

    我将直接介绍我发现的一些事实 数据 如果您遇到 解决了类似的问题 请帮助我 我每 5 分钟向服务器发送一次数据 除非用户在服务器的帮助下手动将其关闭 wakeful broadcast receiver通过一个intent service
  • 业务代表与服务定位器

    Business Delegate 和 Service Locator 之间有什么区别 两者都负责封装查找和创建机制 如果 Business Delegate 使用 Service Locator 来隐藏查找和创建机制 那么 Busines
  • Maven 多模块项目结构问题

    自从过去几周构建我的 Maven 多模块项目以来 这是我的一次有趣的经历 当我决定使用 Maven 进行构建生命周期管理时 我有几个原因希望选择 Maven A 大多数开发团队都是分开的 这样每个团队都可以在项目中的单独模块上工作 例如团队
  • 独占锁定ConcurrentHashMap

    我知道不可能锁定 ConcurrentHashMap 进行独占访问 但是 我找不到原因 是因为构成CHM的 Segment 没有被api公开吗 据推测 如果是的话 客户端代码可以执行 交接 锁定 Cheers 我知道不可能锁定 Concur
  • 在 Spring 中设置 WS https 调用超时 (HttpsUrlConnectionMessageSender)

    我正在尝试为 WS 调用设置超时 我延长了WebServiceGatewaySupport并尝试将发送者超时设置为如下 public Object marshalSendAndReceive Object requestPayload We
  • Java String.format 向整数添加空格

    我有一小段代码 我不明白输出 此输出向我的字符串格式文本添加空格 我做错了什么吗 public class HelloWorld public static void main String args int a1 540 int a2 4
  • 哪种 Java DOM 包装器是最好或最受欢迎的? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 存储过程将多个表返回到 spring jdbc 模板

    我正在使用 JdbcTemplate 从 Spring DAO 类调用存储过程 我的问题是 存储过程返回多个表 有没有办法使用 Spring JdbcTemplate 访问多个表 如果我使用jdbcTemplate queryForList
  • 用 Java 创建迷宫求解算法

    我被分配了用 Java 创建迷宫求解器的任务 这是任务 Write an application that finds a path through a maze The maze should be read from a file A
  • Android 中的字符串加密

    我正在使用代码进行加密和加密 它没有给出字符串结果 字节数组未转换为字符串 我几乎尝试了所有方法将字节数组转换为字符 但没有给出结果 public class EncryptionTest extends Activity EditText
  • Android同步onSensorChanged?

    这是我的问题的后续 Android线程可运行性能 https stackoverflow com questions 36395440 android thread runnable performance 我在理解应用程序的同步方法时遇到
  • Java 9 中紧凑字符串和压缩字符串的区别

    有什么优点紧凑的字符串 http openjdk java net jeps 254JDK9 中的压缩字符串 压缩字符串 Java 6 和紧凑字符串 Java 9 都有相同的动机 字符串通常实际上是 Latin 1 因此浪费了一半的空间 和

随机推荐

  • 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 中的类 也就