Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用注释创建API的多个版本_Java_Compiler Construction_Annotations_Preprocessor - Fatal编程技术网

Java 使用注释创建API的多个版本

Java 使用注释创建API的多个版本,java,compiler-construction,annotations,preprocessor,Java,Compiler Construction,Annotations,Preprocessor,是否可以使用注释来创建API的多个版本 我有一个需要实现的目标API,但它随着时间的推移而增长,我希望支持多个级别——如果可能的话,在同一个分支中。我已经考虑过拆分API并将其代理到实现库,但这仍然需要大量代码来保持同步 因此,您可以创建如下代码: @Since("1.2") <- only created when 1.2 or higher public interface InNewerAPI { @Since("1.3") <- only compiled when

是否可以使用注释来创建API的多个版本

我有一个需要实现的目标API,但它随着时间的推移而增长,我希望支持多个级别——如果可能的话,在同一个分支中。我已经考虑过拆分API并将其代理到实现库,但这仍然需要大量代码来保持同步

因此,您可以创建如下代码:

@Since("1.2") <- only created when 1.2 or higher
public interface InNewerAPI {

    @Since("1.3") <- only compiled when 1.3 or higher
    public void methodInEvenNewerAPI();

}
当然,我也可以为此使用预处理器,但我希望避免使用Java代码的预处理器

这种方法是否有任何缺点,例如在1.8之前丢失参数名称


注意,我需要支持接口和类,包括抽象类和内部类。方法和常量也需要进行版本控制。

好的,我认为您确实可以使用注释来标记应该公开API的版本范围。例如,如果在版本1.1中引入了方法foo。并且在版本1.5中已弃用,您可以将其标记为:

类myapimpl{ @从1.2开始 @反对1.4 @直到1.5 傅; }

然后您可以根据客户端版本自动生成接口MyApi:

对于1.2版之前的客户端,此方法将不包括在接口中。 对于版本1.2和1.4之间的客户端,它将包括在内 对于客户端版本1.4,它将包括在内,但标记为@Deprecated 1.5之后的客户将不包括此项
我认为这是很优雅的。你说的是支持多个Java版本,而不是API的不同版本,对吗?你想如何使用这些注释?我的意思是,你想阻止老客户机调用新的API还是阻止老客户机看到它?@KevinSheehan不,我没有指定的API的不同版本,它包含接口和类。@AlexR后者,它们不应该出现在类文件中,例如,为了避免客户机为错误的系统生成。