gpt4 book ai didi

java - 什么构成了 Java API

转载 作者:行者123 更新时间:2023-11-28 06:18:51 25 4
gpt4 key购买 nike

我的问题与这篇文章有关:difference between jstl-api and jstl-impl

但是,就我而言,我正在处理一些项目合作伙伴提供给我们的软件。上述合作伙伴向我提供了他们的“代码”,主要由两个 jar 文件组成:Software.api-version1.jar,和 Software.impl-version2.jar。两个文件都包含 class 文件。该实现显然被混淆了,所以我无法真正看到发生了什么,但 API 包含许多记录在案的类。然而,这些似乎是接口(interface)/抽象类。

我的问题如下:

究竟什么被认为是 Java API?来自 C/C++ 的术语 API 对我来说意味着一组带有方法声明的类。然后,实现由这些方法的实现组成。由于在 C++ 中,代码通常分为 header (.h,包含定义)和源代码(.cpp,包含实现),因此 header 可能有不同的实现。我从未见过相同功能的不同实现,但我想这是可以做到的。

相比之下,我不太确定 Java API 是如何工作的。我该如何处理无法实例化的抽象类?我将不得不在某处获得一个实现类的实例,但返回这样一个实例已经成为实现的一部分,不是吗?

最佳答案

Java API 与 C++ API 或任何其他 API 没有什么特别之处。换句话说,如果您正在与 Java 开发人员交谈并且您说“Java API”,他们不会想到与您说“C++ API”或“REST API”有什么不同。

您看到的是打包类文件的约定。当库提供者将他们的实现拆分为“API”和“实现”JAR 时,他们通常这样做是因为您将针对 API JAR 编译您的项目,而环境(例如服务器)将提供实现。按照惯例,实现 JAR 应该包含“API JAR”包含的所有内容加上实现,因此实现 JAR 实际上也提供了 API!

大多数第三方库都在一个 JAR 中提供。我不确定为什么您的项目合作伙伴将其一分为二。一些 Java EE 库这样做的原因是保持部署精简:您不需要实现,因为容器(例如 Glassfish、TomcatEE)会提供它们。

理论上,您可以使用他们的 API JAR 进行编译。除非您模拟它们的实现,否则您将无法运行您的应用程序或测试。同样在理论上,您可以忽略 API JAR 而使用实现 JAR,除非 API JAR 实际上包含实现 JAR 不包含的类,在这种情况下,您的项目合作伙伴实际上是在做他们自己的事情。

无论如何,您绝对应该问问您的项目合作伙伴为什么他们以这种方式打包文件,因为 Java 没有什么必要的东西需要它。

另见

关于java - 什么构成了 Java API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29679897/

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