我在Kotlin中遇到了这个错误:
class GitHubRepoAdapter(private val context: Context,
private val values: List<GithubRepo>) : ArrayAdapter<GithubRepo>(context, R.layout.list_item,
values) {
Run Code Online (Sandbox Code Playgroud)
私有val上下文:上下文
在日志中它说:
错误:(14,25)意外覆盖:以下声明具有相同的JVM签名(getContext()Landroid/content/Context;):fun():Context fun getContext():Context!
我无法看到导致问题的原因.
我正在尝试将Kotlin引入我当前的项目中.我决定从实体开始,这些实体似乎完美地映射到数据类.例如,我有一个数据类:
data class Video(val id: Long, val ownerId: Long, val title: String, val description: String? = null,
val imgLink: String? = null, val created: Date? = null, val accessKey: String? = null,
val views: Long? = null, val comments: Long? = null, val videoLink: String? = null): Entity
Run Code Online (Sandbox Code Playgroud)
其中实现了Java接口:
public interface Entity {
Long getId();
}
Run Code Online (Sandbox Code Playgroud)
但由于某些原因,编译器不理解该方法已经实现:
类'Video'必须声明为abstract或实现抽象成员public abstract fun getId():kotlin.Long!在net.alfad.data.Entity中定义
我是否必须为id param使用任何其他关键字?什么"!" 签名意味着什么?
我有一个类似的第三方java库
public class ThirdParty {
public String getX() {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我在kotlin中也有一个界面
interface XProvider {
val x: String?
}
Run Code Online (Sandbox Code Playgroud)
现在我想扩展ThirdParty类并实现XProvider接口.这在我的遗留Java代码中运行良好:
public class JavaChild extends ThirdParty implements XProvider {}
Run Code Online (Sandbox Code Playgroud)
但是,我想写尽可能多的kotlin并尝试将我的java类转换为kotlin.可悲的是,以下不起作用:
class KotlinChild: ThirdParty(), XProvider
Run Code Online (Sandbox Code Playgroud)
错误是
class 'KotlinChild1' must be declared abstract or implement abstract member public abstract val x: String? defined in XProvider
Run Code Online (Sandbox Code Playgroud)
但是,如果我做的话
class KotlinChild1: ThirdParty(), XProvider {
override val x: String? = null
}
Run Code Online (Sandbox Code Playgroud)
我明白了
error: accidental override: The following declarations have the …Run Code Online (Sandbox Code Playgroud)