为什么java.awt.Color对每个Color都有两个变量?

时间:2014-03-28 09:22:18

标签: java variables colors awt

摘自java.awt.Color

...
/**
 * The color white.  In the default sRGB space.
 */
public final static Color white     = new Color(255, 255, 255);

/**
 * The color white.  In the default sRGB space.
 * @since 1.4
 */
public final static Color WHITE = white; // My comment: THE SAME!!??
...

从上面的摘录中可以看出,Color white已分配给两个变量,即Color#WHITEColor#white这也是同样的情况:

 - black     (and BLACK)
 - blue      (and BLUE)
 - cyan      (and CYAN)
 - darkGray  (and DARK_GRAY)
 - gray      (and GRAY)
 - green     (and GREEN)
 - lightGray (and LIGHT_GRAY)
 - magenta   (and MAGENTA)
 - orange    (and ORANGE)
 - pink      (and PINK)
 - red       (and RED)
 ->white     (and WHITE)<-discussed
 - yellow    (and YELLOW)

最初,我曾经认为每种颜色都有两个名称是有原因的。但当我检查source code时,我发现它们都具有相同的值


我想知道为什么每种颜色都有两个变量?

此类使用是否有任何具体原因(无论是历史性的,实用的等)?

最后,在我们的应用程序中使用哪两个?

// THIS?:
Color newC = Color.white;

// OR THIS?:
Color newC = Color.WHITE;

3 个答案:

答案 0 :(得分:5)

变量根据Java约定进行了更改,其中常量仅为大写。小写字母仍然存在兼容性并具有相同的值。

要遵循Java约定,您应始终使用大写常量,如:

Color.RED

答案 1 :(得分:3)

因为他们想要遵循约定(因为 JDK 1.4 ),其中常量应该仅以大写形式使用。所以你应该更喜欢使用:

Color.RED

答案 2 :(得分:3)

如果你看到Color.java的源代码,你会发现两者都是相同的。

public final static Color white     = new Color(255, 255, 255);

和1.4以来

 public final static Color WHITE = white;

仅仅因为Java规范说常量(最终静态)应该是大写的,所以引入了WHITE常量。

<强>更新

  

按照惯例,常量值的名称拼写为大写   字母。如果名称由多个单词组成,则单词为   用下划线(_)分隔。