为什么我不能在typealias上使用@PublishedApi?
在我目前的项目中,我有一个针对不同类型查询的公共接口
interface Query<T>
以及该接口的内部实现。 由于我有公共内联函数来创建不同的查询,我需要在@PublishedApi
上使用@PublishedApi
@PublishedApi internal class QueryImpl<T> : Query<T>
现在为了方便,我想为不同类型的查询定义一些类型别名。
typealias MatchQuery = Query<MatchQueryProperties>
这对公共接口非常有效,但我需要在公共内联函数中创建一个实例
inline fun match(init: MatchQuery.() -> Unit) { // It would look nicer if I could use MatchQueryImpl().init() QueryImpl<MatchQueryProperties>().init() }
但是不必为每种查询都写QueryImpl<PropertiesType>
,我想为实现使用内部的typealias。
// fails because it needs to be internal typealias MatchQueryImpl = QueryImpl<MatchQueryProperties> // can't be used in public inline functions internal typealias MatchQueryImpl = QueryImpl<MatchQueryProperties> // annotation can't be used on typealias @PublishedApi internal typealias MatchQueryImpl = QueryImpl<MatchQueryProperties>
所以我的问题是:
我可以以某种方式使用@PublishedApi internal typealias
吗?
如果不是我为什么不能使用一个?
还有另外一种方法来归档我想要的吗?
目前,您不能在公共内联函数中使用非公共的typealias。 这是目前内联函数检查是否可以在其内部使用非公开API的缺点。
我已经开了一个问题KT-19407跟踪和讨论这个问题。
- Kotlin:“fun main(parameters:Array <String>)”中的默认参数如何在不指定任何值的情况下打印“guest”
- kotlin,如何将扩展函数添加到已定义的类伴侣对象中
- Kotlin原生等同于System.exit(-1)
- Kotlin:调用者体内的函数参数实现
- gradle无法编译google地方API
- 清单合并失败:使用kotlin模块时
- 包在一个JAR中的Kotlin .kt类
- Kotlin:将ArrayList <String!>转换为Array <String>
- 从Fragment调用Anko toast()方法会导致java.lang.NoSuchMethodError