gpt4 book ai didi

java - 相当于Java中的C++头文件?

转载 作者:行者123 更新时间:2023-11-30 06:07:41 32 4
gpt4 key购买 nike

我有一个大型 Java 库,我想开发几个与该库接口(interface)的较小应用程序。该库将作为 JAR 出现在目标设备的类路径中,但我想尽可能避免在编译时出现整个库(JAR 或源代码)。 (如果重要的话,JAR 相当大,我也想保护知识产权,尽管这不是我主要关心的问题。)

在 C++ 中,我会通过创建一个 DLL (.so) 并将相关的类和函数定义 header 复制到我的项目并在编译时将它们添加到包含路径来解决这个问题,让动态链接器在运行时。

如何在 Java 中执行此操作?我的一个想法是删除私有(private)方法/成员,并剥离相关类的方法,以便它们的主体为空,并在运行时加载具有相同签名的真实类和方法。然而,这种方法看起来非常丑陋和简陋,而且需要一些工具来自动化这个过程。有没有工具可以做到这一点?有没有更好的办法?

我不认为它是 this question 的副本.该问题的重点是通过删除不必要的类,在编译时最小化生成的 JAR 文件的大小。我的意思不是要删除未使用的定义,而是要完全避免在编译时需要完整的库 JAR。尽管这些很相似,并且可能有一种方法可以使用 ProGuard 实现我想要的效果,但链接的问题并未讨论它。

最佳答案

在 Java 中没有头文件的确切等价物,但是可以使用接口(interface)来实现在没有实际实现的情况下针对“头文件”(在“契约”的含义中)进行编译:

  • 使用相关方法为您想要“ header ”的每个类创建接口(interface)
  • 让实际的类实现各自的接口(interface)
  • 将接口(interface)打包到一个 JAR 中,将实现打包到另一个 JAR 中
    • (如果你使用像Maven这样的构建工具,使用两个项目,让实现项目依赖接口(interface)一个)
  • 只在编译时提供接口(interface)JAR,运行时都提供

当然需要一些知道实际实现并可以实例化它们的工件,否则您将不得不使用一些查找来搜索类路径以寻找合适的实现。

关于java - 相当于Java中的C++头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40997215/

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