'public'函数公开其'public / * package * /'参数类型SolarEdgeException

时间:2019-03-09 10:42:16

标签: java kotlin package class-visibility

我有以下Java和Kotlin类:

package nl.friesoft.solaredgenotifier;

class SolarEdgeException extends Exception {
    public SolarEdgeException(String s)  {
        super(s);
    }
}



package nl.friesoft.solaredgenotifier

class SiteStorage(context: Context): ISolarEdgeListener {
    override fun onError(site: Site?, exception: SolarEdgeException?) {
    }
}

我收到此编译错误:

  

'public'函数公开其'public / package /'参数类型SolarEdgeException

两个类都在同一个包中,那么为什么不编译呢?

1 个答案:

答案 0 :(得分:2)

Kotlin中的类默认为public,因此每个成员/函数都暴露于外部世界。相反,在Java中,默认可见性为public,即省略了protectedprivatepackage-private之类的可见性关键字。

SolarEdgeExceptionpackage-private,而其用户SiteStorage则完全是public

这意味着SiteStorage的用户根本无法捕获或使用您的异常。


不幸的是,Kotlin没有package-private的概念,因为软件包的管理方式与Java中不同。

最好拥有internal,这意味着该定义对整个模块都是可见的。
在这种情况下,我想将SolarEdgeException设为public类,并将构造函数保持为package-private

关于package-private可见性的Kotlin上有一个论坛主题,很有趣。
kotlin-to-support-package-protected-visibility