在浏览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语言类的示例以有害的方式违反了某些规则。如果您没有机会阅读本书,我强烈建议您阅读。

10-06 13:52
查看更多