内联函数无法访问非public-API:@PublishedApi vs @Suppress vs @JvmSynthetic

Inline function cannot access non-public-API: @PublishedApi vs @Suppress vs @JvmSynthetic

在 Kotlin 中,当我有一个非 public 成员和一个调用它的 inline fun 时,出现编译错误:

Error:(22, 25) Kotlin: Public-API inline function cannot access non-public-API private fun f(): Unit defined in com.example

我找到了几种在 public inline fun 中调用函数的方法,但哪种方法最好?

假设我有一个private fun f() { }。那么我找到的选项是:

那么,这些解决方案中哪一个是从 public 内联函数调用非 public 函数的最佳方式?我没有看到的每种解决方案的缺点是什么?

@PublishedApi internal 是公开 non-public API 以便在 public 内联函数中使用的预期方式。

那个 @PublishedApi internal 成员实际上变成了 public 并且它的名字 没有 被破坏(如果您注意到相反的情况,请提交错误)。

@Suppress("NON_PUBLIC_CALL_FROM_PUBLIC_INLINE") 是缺少 @PublisedApi 的 band-aid 解决方法,基于抑制错误,因此不推荐使用。随着 @PublishedApi 的引入,这种抑制将从 stdlib 中清除。

@JvmSynthetic@PublishedApi 相结合是一种有趣的方法,但是它在调试时可能会导致一些问题,尽管我不确定。