我有一些类似于以下内容的界面:
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
但没有运气。
我懂了。谢谢,知道的食物...我一直认为它是由生成的实现类支持的。顺便说一句,我提供非注释方法(
plus()
)的实现的方法只是在接口中具有默认实现。无法使改造接口扩展我的Context
接口的问题是,我无法对存在于我的中Key
的ApiInterface
实现使用相同的接口Context
。试图找出一种不错的方法。再次感谢你的帮助!@admqueiroga请查看更新后的答案。
我认为这正是我所需要的。试图将其添加
-Xjvm-default=enable
到Kotlin项目中,但是现在我必须处理Error: Could not create the Java Virtual Machine.
一下,一旦确定了在哪里添加该参数将起作用。现在,我要添加类似的东西,kotlinOptions.freeCompilerArgs += listOf("-Xjvm-default=enable")
但它破坏了JVM。再次感谢@esentsov的帮助!非常感激!如果未设置,
kotlinOptions.freeCompilerArgs += listOf("-Xjvm-default=enable")
则无论我在哪里使用,IDE都会显示错误@JvmDefault
。当我设置此标志时,错误消失了,但是由于导致无法创建JVMUnrecognized option: -Xjvm-default
。顺便使用Gradle您是否还设置
jvmTarget = "1.8"
了科特林和sourceCompatibility
,targetCompatibility
以JavaVersion.VERSION_1_8
?