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

2023-11-21

我有以下 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 中默认可见性,即省略可见性关键字,例如public, protected or private, is package-private.

SolarEdgeException is package-private,而其用户SiteStorage完全是public.

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


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

你能拥有的最好的就是internal,这意味着该定义对整个模块可见。
我想说,在这种情况下,让SolarEdgeException a public类,将构造函数维护为package-private.

上有一个论坛主题package-privateKotlin 的可见性,这是​​一本有趣的读物。
kotlin 支持包保护的可见性

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“public”函数公开其“public/*package*/”参数类型 SolarEdgeException 的相关文章

随机推荐