为什么我不能在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跟踪和讨论这个问题。