kotlin 对于“无法访问'< init>':它在XYZ中是私有的,有什么解决方案吗?

sirbozc5  于 2022-12-27  发布在  Kotlin
关注(0)|答案(4)|浏览(219)

我包含了一个我想使用的库,但是在访问它的一个类时,我收到了错误消息,
“无法访问”“:它在[类名]中是专用的
有没有什么我可以做的,以纠正这对我来说,还是我只是坚持不使用该软件包?

uxhixvfz

uxhixvfz1#

这个错误意味着构造函数是私有的。根据你的评论,我假设你正在使用一个库。如果是这样的话,你必须找到一个不同的方法来初始化它。一些库有工厂或者类的构造器,所以查阅任何适用的文档(如果它是一个库或框架)。其他的也使用单例模式,或者其他形式的初始化,开发人员不直接使用构造函数。
然而,如果它是你的代码,从构造函数中移除private。如果它是internal,并且你试图在模块外访问它,移除internal。记住,the default accessibility is public。或者,如果你想保持构造函数私有或内部,你可以使用builder模式、工厂模式或任何类似的模式。

qhhrdooz

qhhrdooz2#

我在试图扩展另一个文件中的密封类时遇到了这个问题。如果没有看到库代码,很难知道这是否也是您试图做的。
密封类具有以下独特功能:

  • 密封类可以有子类,但所有子类都必须在与密封类本身相同的文件中声明。
  • 密封类本身是抽象的,不能直接示例化,但可以具有抽象成员。
  • 密封类不允许具有非私有构造函数(默认情况下,它们的构造函数是私有的)。
  • 扩展密封类的子类的类(间接继承者)可以放在任何位置,不必放在同一个文件中。

有关详细信息,请访问https://www.ericdecanini.com/2019/10/14/kotlins-sealed-class-enums-on-steroids/
希望,这将有助于其他新的Kotlin谁也遇到这个问题。

lf5gs5x2

lf5gs5x23#

默认情况下,类构造函数是包私有的,只需在声明构造函数之前添加public关键字即可。

bvjxkvbb

bvjxkvbb4#

默认情况下,构造函数是公共的,因此需要删除internal关键字。

相关问题