Bar*_*chs 4 java package class-visibility kotlin
我有以下 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?) {
}
}
Run Code Online (Sandbox Code Playgroud)
我得到这个编译错误:
“public”函数公开其“public/ package /”参数类型 SolarEdgeException
两个类都在同一个包中,为什么不编译呢?
Kotlin 中的默认类是public
,因此每个成员/函数都暴露于外部世界。相反,在 Java 中,默认可见性,即省略可见性关键字,例如public
, protected
or private
,是package-private
。
SolarEdgeException
是package-private
,而它的用户SiteStorage
完全是public
。
这意味着用户SiteStorage
根本无法捕获或使用您的异常。
不幸的是,Kotlin 没有 的概念package-private
,因为包的管理方式与 Java 中的不同。
最好的是internal
,这意味着定义对整个模块都是可见的。
我会说,在这种情况下,创建SolarEdgeException
一个public
类,将构造函数维护为package-private
.
有一个package-private
关于 Kotlin 可见性的论坛帖子,这是一个有趣的阅读。
kotlin-to-support-package-protected-visibility
归档时间: |
|
查看次数: |
2753 次 |
最近记录: |