Kri*_*lsh 5 java android kotlin
我正在将Java中的某些类转换为kotlin,并且尝试从接口继承时遇到编译错误:
平台声明冲突:以下声明具有相同的JVM签名(getContentID()Ljava / lang / String;):
public open fun get-content-id():字符串?public open fun getContentId():字符串?
这是界面:
interface Media {
val contentId: String
val displayRunTime: String
val genres: List<String>
val programId: String
val runTime: String
val type: String
}
Run Code Online (Sandbox Code Playgroud)
这是课程:
class Airing : Media {
override val contentId: String? = null
override val displayRunTime: String? = null
override val genres: List<String>? = null
override val programId: String? = null
override val runTime: String? = null
override val type: String? = null
override fun getContentId(): String? {
return contentId
}
Run Code Online (Sandbox Code Playgroud)
我是科特林的新手。
您不需要声明override fun getContentId(): String?,因为val contentId: String来自Media接口的已经被 覆盖了override val contentId: String?。
您得到的错误意味着您在 JVM 字节码中声明的函数与已经为该contentId属性生成的 getter(getter 具有相同的签名)发生冲突。
在 Kotlin 中,您应该contentId直接使用属性,而在 Java 中,您可以使用生成的访问器getContentId()和setContentId(...).
此外,Kotlin 不允许您String使用可为空的属性覆盖非空属性String?,因为基本接口的用户将期望来自该属性的非空值。您应该用 替换被覆盖的属性类型String,或者String?在界面中创建它们。
| 归档时间: |
|
| 查看次数: |
4342 次 |
| 最近记录: |