我有以下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
或private
,是package-private
。
SolarEdgeException
是package-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