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



我有以下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

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

默认情况下的Kotlin中的类是public,因此每个成员/函数都暴露于外部世界。相反,在Java中,默认可见性省略了可见性关键字,例如publicprotectedprivate,是package-private

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

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


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

最好的是internal,这意味着定义是整个模块的可见性。
我会说,在这种情况下,将SolarEdgeException成为public类,将构造函数保持为package-private

package-private可见性的论坛线程,这是一个有趣的读物。
kotlin到kotlin to-sup-pake-package-package-package-package-package-distected-visibility-visibility

相关内容

最新更新