是否有一个工具可以让我在必须与Java 1.4编译的代码中检查泛型集合的使用?我想象示例代码为:
Map/*<String, Integer>*/ map = new HashMap();
map.put("abc", new Integer(3)); // ok
map.put("def", "ghi"); // warning
编辑:不幸的是构建过程是“一成不变”使用Java 1.4,因此我提交的代码不能包含任何1.5功能,或依赖于任何翻译工具。到目前为止,最简单的解决方案似乎是维护1.5的本地代码版本,并在提交之前将其转换为1.4。
答案 0 :(得分:1)
我建议使用1.5编码并使用声明工具(google for it,对原始版本进行各种更新),以便在需要构建1.4兼容代码时去除泛型。
为我们工作(尽管我们在原始声明中添加了一些功能,以便它可以解析我们的源文件)。
答案 1 :(得分:0)
是否真的要求可编译对1.4,或者只能在1.4上运行?在后一种情况下,您可以使用Retroweaver。或者,如果您只想使用泛型,只需使用未记录的-target jsr14
选项进行编译。
但我很确定没有像你描述的那样 - 有什么意义呢?
答案 2 :(得分:0)
我不确定我是否做到了这一点:你想写那个评论“&lt; String,Integer&gt;”在你的代码中运行一些Static code analysis工具来检查它是否会编译?
我认为现在没有这样的事情,但你应该看看findbugs。 Findbugs将帮助您使用泛型和类似的东西:
List<String> list = new ArrayList<String>();
list.add("foo");
list.contains(new Integer(5));
这是可编译的代码,因为出于兼容性原因,contains不是通用的。但是,findbugs会为您提供一个很好的警告。
也许你可以自己编写一个findbugs探测器,它可以满足你的需求,但是由于finbugs可以处理字节代码,你需要使用与注释不同的东西,例如:注释
答案 3 :(得分:-1)
使用-source 1.4
作为javac
命令的标志。以下是the details。