是否有"无法访问"的解决方案<init>:它在 XYZ 中是私有的?



我包含了一个我想使用的库,但在访问其中一个类时,我收到了错误消息

"无法访问'<init>':它在[类名]中是私有的

我能做些什么来纠正这一点吗?还是我只是坚持不使用该软件包?

该错误表示构造函数是私有的。根据你的评论,我假设你使用的是图书馆。如果是这种情况,你必须找到一种不同的方法来初始化它。有些库有类的工厂或生成器,所以请查找任何适用的文档(如果是库或框架(。其他人也使用singleton模式,或者其他形式的初始化,而开发人员不直接使用构造函数。

但是,如果是您的代码,请从构造函数中删除private。如果它是internal,并且您正试图在模块外访问它,请删除internal。请记住,默认的辅助功能是public。或者,如果您想保持构造函数的私有或内部,您可以自己使用构建器模式、工厂模式或任何类似的模式。

我在尝试扩展另一个文件中的密封类时遇到了这个问题。如果没有看到库代码,很难知道这是否也是你想要做的

密封类具有以下独特功能:

  • 密封类可以有子类,但所有子类都必须在与密封类本身相同的文件中声明。

  • 密封类本身是抽象的,不能直接实例化,可以有抽象成员。

  • 密封类不允许有非私有构造函数(默认情况下,它们的构造函数是私有的(。

  • 扩展密封类的子类的类(间接继承者(可以放在任何地方,而不一定放在同一个文件中。

有关更多信息,请阅读https://www.ericdecanini.com/2019/10/14/kotlins-sealed-class-enums-on-steroids/

希望这能帮助其他新接触科特林的人,他们也遇到了这个问题。

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

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

相关内容

最新更新