gpt4 book ai didi

java - 如何制作一个使用 AutoCloseable 并支持 Java 6 的库

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:26:16 53 4
gpt4 key购买 nike

我正在为 Java 开发人员制作一个库。我想制作一个实现 AutoCloseable 接口(interface)的类,以防开发人员使用 Java 7。但我还需要为面向 Android(不支持 AutoCloseable)的开发人员提供不带 AutoCloseable 接口(interface)的类版本。

在这两种情况下,我的类(class)名称必须相同。

一个解决方案是预处理器,但我的目标是开发人员,不能指望他们采用任何非标准的预处理器。

那么,根据 Java 版本支持同一类的两个版本的最佳实践是什么?

谢谢!

--更新澄清:
两个版本的完整源代码的唯一区别是“implements AutoCloseable”这两个词:
公共(public)类事务 { ...
或者
公共(public)类事务实现 AutoCloseable {...

最佳答案

  1. 做一个 AutoCloseable 的反向移植

  2. 使用向后移植而不是真实的东西制作你的库的第二个版本

  3. 要么通过将库实际发布为两个工件来让用户选择使用哪个库,要么构建一个使用反射加载正确版本的通用外观。

对于反向移植:

AutoClosable 可以按原样重复使用。

对于每个实现,您都需要一个到该接口(interface)的适配器。

try with resources语句看起来有点像

abstract public class Try {
private List<AutoClosable> closables = new ArrayList<>();

public void register(AutoClosable closable){
closables.add(closable);
}

abstract void execute();

public void do(){
try{
execute()
} finally {
for (AutoClosable c : closables)
c.close() // there are tons of exceptionhandling missing here, and the order might need to get reversed ....
}
}
}

用法看起来有点像:

new Try(){
File f = new File();
{
register(closable(f)) // closabe would return an Adapter from File to AutoClosable
}

void execute(){
f.doSomeFunStuff()
}
}.do();

关于java - 如何制作一个使用 AutoCloseable 并支持 Java 6 的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13526007/

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