Kotlin 科特林。如何在开放类中实现内部接口?
我想要一个开放类来实现内部接口,并且只在包中使用这个接口。如果我将这个内部接口设置为非内部接口,它要求我将这个接口中使用的所有类设置为非内部接口,然后它会创建一个多米诺更改,所以我需要将所有内容设置为非内部接口 比如:Kotlin 科特林。如何在开放类中实现内部接口?,kotlin,Kotlin,我想要一个开放类来实现内部接口,并且只在包中使用这个接口。如果我将这个内部接口设置为非内部接口,它要求我将这个接口中使用的所有类设置为非内部接口,然后它会创建一个多米诺更改,所以我需要将所有内容设置为非内部接口 比如: open class Form : Interface { override fun a(): ActionExecutor {} } internal interface Interface { fun a(): ActionExecutor } 当我试图编译它时,
open class Form : Interface {
override fun a(): ActionExecutor {}
}
internal interface Interface {
fun a(): ActionExecutor
}
当我试图编译它时,我得到以下错误
Form.kt:(74,16):“public”函数在使用修饰符标记接口时公开其“内部”返回类型ActionExecutor
当此接口中的任何客户端看到声明类时,都会看到其内部成员。如果要在另一个模块中使用具有内部
修饰符的实体,则必须删除此修饰符。这可能导致链删除,因为该实体可能使用其他内部
实体
当您使用public
类实现internal
接口时,您将公开其internal
成员,这是禁止的
当我试图编译它时,我得到以下错误Form.kt:“public”函数公开其“internal”返回类型ActionExecutor
然后fun a():ActionExecutor
已经不能在表单中公开,无论实现接口
。因为如果是的话,模块外的用户可以调用它并获得一个ActionExecutor
,而他们不应该这样做
一个选项不是直接在表单上实现接口,而是使方法/属性返回它:
open class Form {
// some methods
internal val asInterface: Interface = object : Interface {
override fun a(): ActionExecutor {
// can access members of Form here
}
}
}
然后,同一模块中的代码可以自由地将表单
视为接口
,而外部代码不能,因此没有问题。在尝试实现内部接口时是否有错误?是的,添加到derscriptionIt的bczActionExecutor
类是内部的。你能让它不是内部的吗?