【问题标题】:Android: Why does the Color class have a public constructor?Android:为什么 Color 类有一个公共构造函数?
【发布时间】:2016-06-23 04:09:17
【问题描述】:

当所有成员都是静态的时,为什么android Color 类有一个公共构造函数?这只是一个错误吗?

【问题讨论】:

  • 您可能必须找到那些多年前编写 Color 课程的 Google 工程师并询问。

标签: android


【解决方案1】:

Color.java 文件的source code 表明没有 Google 工程师明确为 Color 类编写公共构造函数。

Color 类的API documentation 确实列出了一个公共构造函数,但Java 有一个implicit default constructor,这是文档中列出的构造函数。

这里真正可能的问题是非此即彼,

  • 为什么 Google Android 文档在类文档的构造函数部分列出了隐式默认构造函数?
  • 当我可以创建一个只有静态成员的类时,为什么 Java 有一个隐式默认构造函数?

对于第一点,我不认为 Google 决定列出隐式默认构造函数是任何错误或错误的设计决定。他们可以在类中定义一个构造函数来限制对任何构造函数的访问,但这只需要额外的代码,并且为只有静态成员的类创建一个默认构造函数不会导致类的任何误用。

对于第二点,对编译器进行优化以防止在只有静态成员的类中出现任何隐式默认构造函数可能是有意义的,但这是另一个线程的问题。

tl;dr 不,不是错。

【讨论】:

  • @dragon66 我仍然认为这不是需要解决的单个开发人员问题,而是您可能喜欢也可能不喜欢的语言功能。其他语言的处理方式不同。如果实在不喜欢,可以去提出 pull request,Android 是开源的。
  • 不,即使使用私有构造函数,您仍然可以使用反射实例化它。单个开发人员解决此问题的唯一方法是既实现私有构造函数,又在私有构造函数中抛出异常。这不是单个开发人员要解决的问题。正如我围绕第二点讨论的那样,可能会对此进行编译器优化,但这仍然不是单个开发人员需要解决的问题。
  • 反射不是黑客攻击
【解决方案2】:

可能的一致性和潜在的未来用途是工程师编写构造函数的原因,即使它什么都不做。但是,工程师可能没有编写构造函数。如果没有给出构造函数,编译器会创建一个默认的公共构造函数。

查看答案given here。它链接到this

文档在某种程度上可能是自动生成的,它可能会告知您默认构造函数的存在,即使工程师没有创建它。

【讨论】:

    猜你喜欢
    • 2012-01-20
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 2012-03-12
    • 2011-10-23
    • 2011-04-16
    相关资源
    最近更新 更多