- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题与这篇文章有关: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/
您好,我正在使用 AWS EKS 开发 kubernetes。当我将 docker-compose 文件转换为 kompose 文件时,我遇到了 kompose 文件的问题,我遇到了卷挂载点问题,而且
在将密码转换为二进制哈希值以存储在数据库中时,我注意到除了通常的乱码之外,还有一些引号、空格和字母表,这些巧合可能构成有效 SQL 语句的一部分。 出于好奇,我想知道是否有人遇到过任何字符串在哈希后神
我的组件具有动态部分和 compose。动态部分在其他模块中,即节点项目。 如果我想在页面中使用自定义元素,例如: 我收到一条错误消息,指出无法在 ./my-custom-element/someV
我有一个 pandas 数据框,其中一列由数组组成。所以每个单元格都是一个数组。 假设数据框 df 中有一个列 A,这样 A = [ [1, 2, 3], [4, 5, 6],
当 HTTP 请求和响应在互联网上传输时,请求中文本的格式是什么?是 ASCII 码吗? 例子:如果 HTTP 请求如下所示 - GET /mysite/ HTTP/1.1 -- rest of t
我是一名优秀的程序员,十分优秀!