【问题标题】:Why can't we create instance of Collections class (not Collection Interface)?为什么我们不能创建 Collections 类的实例(不是 Collection 接口)?
【发布时间】:2012-01-01 12:45:46
【问题描述】:

Collections 是一个公共类,那么我们可以调用它的隐式默认构造函数。它没有私有构造函数,这将阻止对象创建或强制具有静态工厂方法。当我实例化为new Collections() 时,我收到错误为“构造函数不可见”。简而言之,为什么我们不能有java.util.Collections 类的实例?谢谢。

【问题讨论】:

  • 你认为它会做什么?
  • 我的java.util.Collections 类确实有一个私有构造函数!

标签: java collections


【解决方案1】:

来自documentation:“这个类只包含对集合进行操作或返回集合的静态方法。”

换句话说,Collections 只是方法的集合。它的一个实例没有任何意义。就像数学函数一样:你没有数学实例,你只是使用函数。

它不是interface,因为它有具体的方法。

【讨论】:

  • 谢谢,哪个概念阻止我们创建 Collections 类的实例。我同意这是没用的,我只是出于好奇。再次感谢。
  • @Ahamed:看我的评论,有一个私有(不可见)构造函数
【解决方案2】:

“构造函数不可见”消息的原因是构造函数是私有的(第 73 行),或者至少根据 this site 。正如其他人已经说过的,你会如何处理这个类的实例,因为它只包含静态方法

// Suppresses default constructor, ensuring non-instantiability.
private Collections() {
}

【讨论】:

  • 谢谢。在源代码中它在那里,但帮助我窥视类内部的反编译器没有显示私有构造函数。
  • @Ahamed - 那么您使用的反编译器有问题。尝试使用javap
  • 我试过javap 命令。它没有显示私有构造函数,不知道为什么,可能是因为它是空构造函数。有一个私有构造函数驻留在类文件中并防止实例化,但没有出现在反编译器或 javap 命令中:)
猜你喜欢
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多