有什么办法可以从Retrofit注释处理器中“隐藏” Kotlin函数吗?

Admqueiroga

我有一些类似于以下内容的界面:

interface ApiInterface : Context.Element {
    @GET(Urls.url)
    suspend fun getSomeData(): Data
}

interface Context.Element {
    operator fun plus(context: Context): Context
}

我正在尝试以Context类似Kotlin的 方式实施实现CoroutineContext当我尝试添加Retrofit http接口时,Context.Element它最终继承了一些其他功能。该代码编译并运行正常,直到我把从我ApiInterface实例功能,从继承Context.Element,因此没有任何@GET@POST或任何改装的注释。

如果我运行以下代码:

val context = ApiInterfaceImpl()
context + DifferentApiInterfaceImpl()

我收到了Exception in thread "main" java.lang.IllegalArgumentException: HTTP method annotation is required (e.g., @GET, @POST, etc.). for method Context.plus

我相信,如果我能够使Retrofit批注处理器跳过从此Context.Element问题继承的功能,将会得到解决。有什么办法吗?任何@Transient类似的功能注释?我尝试使用@JvmSynthetic但没有运气。

精华

这里的问题不在注释处理器中,而是在改造工作方式中。它不会生成实现类,而是在运行时创建一个代理对象,并且该代理对象处理所有方法调用并将它们路由到适当的处理程序。因此很显然,它无法处理非服务方法。同样也不清楚如何为该非注释方法提供实现。所以我想说这是目前不可能的。

编辑:由于您在接口上使用默认方法来提供实现,因此我相信它通常应该可以正常工作,因为Retrofit单独处理默认方法。这里的问题可能是Retrofit仅了解Java默认方法,默认情况下,kotlin不使用它们(以与Java 7及以下版本兼容)。因此,如果使编译器生成java默认方法,则它应该可以工作。请查看此帖子以获取详细信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Kotlin 中的函数是实例吗?

我可以从Dart调用Kotlin函数吗

Kotlin中有构造函数引用吗?

Kotlin中的constructor()是主要构造函数吗?

有什么办法可以隐藏柏树中的日志吗?

有什么办法可以在Kotlin的构造函数中声明T?

无法在Kotlin中构建注释处理器

Kotlin数据类可以具有多个构造函数吗?

Mockito可以用来匹配Kotlin中的函数参数吗?

有什么方法可以检查处理器的时钟速度吗?

在Jinja2模板中隐藏元素?有什么办法可以隐藏按钮吗?

您可以在Kotlin中使用通用的主要构造函数吗?

有什么办法可以隐藏我的真实版本的谷歌浏览器吗?

Kotlin注释处理器如何获取构造函数参数类型?

有什么办法可以从ps命令结果中隐藏内核线程吗?

我们应该避免命名与Kotlin中现有类相同的函数吗?为什么?

有什么方法可以判断笔记本电脑中的图形处理器在工作吗?

在 Kotlin 中,有上限的类型参数扩展函数和普通扩展函数有什么区别吗?

有什么办法可以停止在 kotlin 的 EditText 中以空的十进制值崩溃吗?

有什么办法可以返回使用接口导入的函数吗?

有什么办法可以在python中预处理这种数据吗?

有什么办法可以加快处理速度吗?

如何包括注释处理器生成的代码以测试Java / Kotlin中的类路径

我可以从Kotlin中的函数类型变量中获取KFunction吗?

我可以在Kotlin中访问“封闭”对象进行内联函数调用吗?

如何为 kotlin/native 编写注释处理器?

有什么办法“隐藏”数组中的空元素吗?

DXL 有预处理器吗

有什么办法可以“反转”转换器吗?