【问题标题】:Why does java.awt.Color have two variables for every Color?java.awt.Color 为什么每个颜色都有两个变量?
【发布时间】:2014-05-07 16:00:41
【问题描述】:

摘自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;

【问题讨论】:

标签: java variables colors awt


【解决方案1】:

变量是根据 Java 约定更改的,即常量只能大写。为了兼容性,小写字母仍然存在并且具有相同的值。

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

Color.RED

【讨论】:

  • 这是否意味着它们将在以后的版本中被删除?
  • 我认为它们不会很快被删除,因为它们会首先被标记为已弃用。
  • 但是让我吃惊...既然enums 已经在实践中,他们为什么不将变量替换为enum constants
  • @ambigram_maker:- 正如我在回答中已经提到的那样,自 JDK1.4 起就遵循此约定,但很难说 Oracle 何时会弃用它。!
  • 像这样,他们根据约定引入了新变量,而不会破坏向后兼容性和最小的代码冗余。由于 Java 高度重视向后兼容性,因此它们不会做出会破坏它的剧烈更改。
【解决方案2】:

因为他们想要遵循一个约定(从 JDK 1.4 开始),该约定说常量只能以大写形式使用。所以你应该更喜欢使用:

Color.RED

【讨论】:

    【解决方案3】:

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

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

    从 1.4 开始

     public final static Color WHITE = white;
    

    因为 Java 规范规定常量(final static)应该是大写,所以引入了WHITE 常量。

    更新:

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

    【讨论】:

    • 快乐的三位数代表。 :)
    猜你喜欢
    • 2019-08-11
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多