1

我意识到这两个 Java 版本有很大的不同,但是我要编写的库使用标准的 HTTP/TCP 网络和数据收集来执行它的任务。这是两个平台都提供的两种能力,尽管范围不同。我假设我可以编写一个使用最低公分母的库,但最好有一个 Java SE 版本,它至少可以利用泛型的好处和更广泛的数据收集。

我希望我可以维护一个代码库,在库的两个版本之间共享尽可能多的代码,使用构建脚本为每个 Java 平台生成一个单独的库。API 显然会略有不同,但如果可以共享库的核心业务逻辑,那将节省时间和精力。

我可以利用他们的任何构建脚本/预处理/其他技术来实现这一目标吗?这是否更麻烦,是否值得?

4

2 回答 2

2

这是否更麻烦,是否值得?

大概是。

在 Java 世界中,预处理通常是不受欢迎的。预处理器确实存在,但您往往会发现它们在 IDE、构建工具等中没有得到很好的支持。

对于这样的事情,我推荐以下方法:

  1. 弄清楚代码的 SE 和 ME 版本之间真正需要的实际差异有多大。从长期维护的角度来看,您可能根本不希望有任何差异。

  2. 如果有些事情您根本无法使用最小公分母方法处理,那么将它们分解并设计/实现一个隐藏平台差异的内部 API。用手。

另外,考虑将有用的库从 SE 移植到 ME。例如,如果你真的需要一个完整的集合堆栈,看看你是否可以找到一个 SE Collections 框架到我的端口。(但这样做的缺点可能是我的代码膨胀......这不会让你受欢迎。)

于 2011-02-22T02:19:58.020 回答
0

您需要定义 JavaME 的含义。JavaME 平台由配置和配置文件组成,它们结合起来形成库支持。例如,连接设备配置 (CDC) 之上的 JavaME Personal Profile 1.1 是一个精简的 JavaSE 4。我有一个大型客户端应用程序,它在 JavaSE 4 和 JavaME PP 1.1 上运行时都没有更改,尽管我不得不放弃SE 中提供的API很少,但 PP 1.1 中没有。

最大的问题是您需要的功能是否在两个 JVM 中都可用。

最近我们正在考虑在 Android 下运行相同的客户端,这是一个类似的考虑。如果这两个函数都存在,我的计划是隐藏我自己的 API 库中的差异,并为实现该 API 的两个 JVM 实现一个薄兼容层。

如果您包含 3rd 方移植库,ProGuard之类的工具将使您能够消除未使用的代码以最大限度地减少代码膨胀。

于 2011-02-22T19:57:16.493 回答