Java泛型库与遗留代码的进化及类型具体化问题
1. 编译警告处理
在Java编程中,配置编译器反复发出你打算忽略的警告是不明智的做法。这不仅会分散注意力,更糟糕的是,可能会让你忽视那些需要关注的警告,就像“狼来了”的寓言故事一样。
对于纯遗留代码,可以使用 -source 1.4 开关来关闭此类警告,示例命令如下:
% javac -source 1.4 l/Stack.java l/ArrayStack.java \
% l/Stacks.java l/Client.java
此命令可以编译遗留代码,且不会发出警告或错误。不过,这种关闭警告的方法仅适用于真正的遗留代码,即不包含Java 5引入的任何特性(无论是泛型还是其他特性)的代码。另外,也可以使用注解来关闭未检查警告,这在包含Java 5引入特性的代码中同样适用。
2. 遗留库与泛型客户端
通常情况下,先更新库再更新客户端是合理的,但也存在一些特殊情况需要先更新客户端。例如,你可能只负责维护客户端而不负责库的维护;或者库的规模较大,你希望逐步更新而不是一次性更新;又或者你只有库的类文件而没有源代码。
在这些情况下,可以更新库的方法签名以使用参数化类型,但不更改方法体。有三种实现方式:对源代码进行最小更改、创建存根文件或使用包装器。建议在有源代码访问权限时使用最小更改方法,在只有类文件访问权限时使用存根文件方法,不建议使用包装器方法。
2.1 最小更改法
最小更改技术的示例代码如下: <
超级会员免费看
订阅专栏 解锁全文
1169

被折叠的 条评论
为什么被折叠?



