在浏览Java库(特别是构造函数)时,我注意到字段通常由于某些原因而在之后进行初始化和验证:
public java.awt.Color(int r, int g, int b, int a) {
value = ((a & 0xFF) << 24) |
((r & 0xFF) << 16) |
((g & 0xFF) << 8) |
((b & 0xFF) << 0);
testColorValueRange(r,g,b,a);
}
首先初始化字段并随后验证方法参数有什么意义?不应该这样吗?仅仅是编码约定还是有实际用途?
最佳答案
通常,应在方法或构造函数中的其余方法主体的其余部分检查的参数。这在Joshua Bloch撰写的有效Java一书中有所提及。以下部分提供了相关部分:
http://www.informit.com/articles/article.aspx?p=31551
有一些例外,但在这种情况下均不适用。我对java.awt.Color类为何最后进行检查的猜测是,某些核心Java类没有遵循最佳实践,尤其是像java.awt.Color这样的老类。有许多Java语言类的示例以有害的方式违反了某些规则。如果您没有机会阅读本书,我强烈建议您阅读。