陷阱 - 通配符导入会使你的代码变得脆弱
考虑以下部分示例:
import com.example.somelib.*;
import com.acme.otherlib.*;
public class Test {
private Context x = new Context(); // from com.example.somelib
...
}
假设当你第一次开发针对 somelib
版本 1.0 和 otherlib
版本 1.0 的代码时。然后在稍后的某个时刻,你需要将依赖项升级到更高版本,然后决定使用 otherlib
2.0 版。还假设他们对 otherlib
在 1.0 和 2.0 之间做出的改变之一是添加一个 Context
类。
现在当你重新编译 Test
时,你会得到一个编译错误,告诉你 Context
是一个含糊不清的导入。
如果你熟悉代码库,这可能只是一个小小的不便。如果没有,那么你有一些工作要做,以解决这个问题,在这里,也可能在其他地方。
这里的问题是通配符导入。一方面,使用通配符可以使你的类缩短几行。另一方面:
-
向代码库的其他部分,Java 标准库或第三方库向上兼容的更改可能导致编译错误。
-
可读性受到影响。除非你使用的是 IDE,否则确定哪个通配符导入会在命名类中进行操作可能会很困难。
经验教训是,在需要长寿的代码中使用通配符导入是一个坏主意。如果使用 IDE,特定(非通配符)导入的维护工作量不大,值得付出努力。