为什么我不能在typealias上使用@PublishedApi?
在我目前的项目中,我有一个针对不同types查询的公共接口
interface Query
以及该接口的内部实现。 由于我有公共内联函数来创建不同的查询,我需要在@PublishedApi
上使用@PublishedApi
@PublishedApi internal class QueryImpl : Query
现在为了方便,我想为不同types的查询定义一些types别名。
typealias MatchQuery = Query
这对公共接口非常有效,但我需要在公共内联函数中创建一个实例
inline fun match(init: MatchQuery.() -> Unit) { // It would look nicer if I could use MatchQueryImpl().init() QueryImpl().init() }
但是不必为每种查询都写QueryImpl
,我想为实现使用内部的typealias。
// fails because it needs to be internal typealias MatchQueryImpl = QueryImpl // can't be used in public inline functions internal typealias MatchQueryImpl = QueryImpl // annotation can't be used on typealias @PublishedApi internal typealias MatchQueryImpl = QueryImpl
所以我的问题是:
我可以以某种方式使用@PublishedApi internal typealias
吗?
如果不是我为什么不能使用一个?
还有另外一种方法来归档我想要的东西吗?
目前,您不能在公共内联函数中使用非公共的typealias。 这是目前内联函数检查是否可以在其内部使用非公开API的缺点。
我已经开了一个问题KT-19407跟踪和讨论这个问题。