【问题标题】:Can't create instance - Constructor has private access无法创建实例 - 构造函数具有私有访问权限
【发布时间】:2020-03-31 05:02:24
【问题描述】:

我尝试使用创建桌面类的实例 Desktop desktop = new Desktop(); 但我收到错误Desktop() has private access in Desktop 但是在java documentation 桌面类中声明为public.like this..

公共课桌面 扩展对象

所以因为它是公开的。也不是静态的。那么为什么我不能创建它的实例呢? 我知道我可以使用 Desktop desktop = Desktop.getDesktop(); 但是我不明白为什么我不能创建桌面类的实例。

【问题讨论】:

  • 您可以创建实例,但不能直接创建。您必须使用 getDesktop() 方法。 Desktop 类是公共的,它的构造函数是私有的。这是一个单例(或类似的结构)
  • 如果你编写一个没有构造函数的类,那么编译器会添加一个 synthetic 无参数构造函数。在这种情况下,有一个构造函数,但它不是公共的。如何创建实例取决于 Java 库——这可能是每个 AppContext 按需创建的一个。
  • 在顶部的 java 文档中,您将看到这一行 总结:嵌套 |领域 |构造 |方法详细信息:字段 |构造 |方法 - 如果这种情况下Constr 不是链接,因为没有构造函数
  • 您应该展示构造函数 (Desktop()) 是如何定义的。另外,请尝试使问题标题更通用,以便对其他人也有用。有人可能对另一个不称为 Desktop 的类有完全相同的问题;)

标签: java class oop compiler-errors static


【解决方案1】:

此消息意味着Desktop()(构造函数)在类内部是私有的。如果您查看文档,您将找不到任何可以使用的公共构造函数。因此,您需要使用 this 静态方法来创建一个实例(顺便说一句,这在您的问题中略有不正确):

Desktop desktop = Desktop.getDesktop();

【讨论】:

    【解决方案2】:

    查看文档:

    Desktop 类允许 Java 应用程序启动关联的 在本机桌面上注册以处理 URI 或 文件。

    Desktop 对象代表用户的本机桌面。它不是一个可以创建许多实例的“普通”对象,因为只有一个桌面并且它必须链接到操作系统的许多东西。您不必担心创建此对象。 Java 库将负责创建此对象并将其连接到操作系统。

    这就是您无法创建实例的原因。而这个类的开发者保证你不能创建这个类的实例的方式就是将构造函数设置为private。这就是错误Desktop() has private access in Desktop 的含义。

    【讨论】:

      猜你喜欢
      • 2021-04-17
      • 2018-12-12
      • 2022-07-22
      • 1970-01-01
      • 2020-03-01
      • 2022-01-18
      • 1970-01-01
      • 2019-11-29
      • 2023-03-23
      相关资源
      最近更新 更多