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

时间:2018-11-21 14:01:33

标签: kotlin

我是科特林的新手。我包含了一个我想使用的库,但是在访问它的类时,出现错误消息:“无法访问'':它在[类名]中是私有的。我可以做些什么来纠正这是在我这边,还是我只是被扔掉了包裹。

2 个答案:

答案 0 :(得分:4)

该错误表示构造函数是私有的。给定您的comment,我假设您正在使用一个库。在这种情况下,您将不得不找到另一种初始化方式。一些库具有类的工厂或构建器,因此请查找任何适用的文档(如果是库或框架)。其他人也使用单例模式或其他形式的初始化,而开发人员则不使用构造函数。

但是,如果这是您的代码,请从构造函数中删除private。如果它是internal,并且您正在尝试在模块外部访问它,请删除internal。另外,您可以自己使用构建器模式,工厂模式或任何类似的模式。

答案 1 :(得分:0)

当尝试在另一个文件中扩展密封类时遇到了这个问题。没有看到库代码,很难知道这是否也是您要尝试的操作。

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

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

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

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

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

  •   

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

希望这将对也遇到此问题的Kotlin新手有所帮助。