gpt4 book ai didi

java - 我可以交叉编译可选择使用 Java 8 中的类但编译为 Java 6 的 Java 代码吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:18 24 4
gpt4 key购买 nike

我知道交叉编译的 Java 代码不能使用新的语言特性,IE 没有像 Java 8 的 lambda 或 Java 7 的 try-with-resources 这样的特性。
但是是否可以引用新 Java 版本中添加的新类?

假设我有一个支持 Java 6+ 的库,并且我有一些方法可以接受日期作为参数。
对于 Java 6,我提供了一个使用 java.util.Date 的 API,但对于 Java 8 的用户,我想提供使用 java.time.Instant 的选项。

我希望 Java 6 用户能够使用该库,但如果他们尝试使用 Instant 方法,则会遇到 ClassNotFoundException

是否有一种可接受的方式来做这样的事情,以及如何使用 Gradle 或 Maven 等通用构建工具来实现它?

给出的例子是人为的,请不要给出处理时间的替代方法的答案。

最佳答案

干净利索是不可能的。无法在 Java 6 JRE 上加载提及 Java 8 类型的 API。

如果您的 API 使用 Java 8 类,则 Java 6 客户端无法对其进行编译。理论上,您可以用(比如)java.lang.Object 替换 Java 8 类,并要求客户端代码转换为 java.util.Datejava.time.Instant 取决于执行 平台。但我不认为这会如何被接受,更不用说对尝试使用您的库的程序员有用了。

无论如何,您都需要更改 API。


如果您确实需要支持 Java 6 并且还想开始在您的 API 中使用 Java 8 功能,我建议您支持两个单独的 API:

  • 一个仅使用 Java 6 的 Java 6,以及
  • 另一个也使用 Java 8 类型。

可能能够共享两个版本的 API 背后的一些代码,但这取决于 Java 8 依赖项的“深度”。

但是,更好的办法是硬着头皮停止支持 Java 6 兼容性。 Java 6 于 2013 年 2 月结束。IMO,您有理由卡住 Java 6 API,然后将 Java 8 API 视为需要您的客户端的新版本切换到 Java 8。

关于java - 我可以交叉编译可选择使用 Java 8 中的类但编译为 Java 6 的 Java 代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40865686/

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