【发布时间】:2020-04-08 13:25:33
【问题描述】:
澄清:属性语法 == val s = supportFragmentManager 而不是 val s = getSupportFragmentManager()
如果我正在为 Activity 类编写接口,并且想在保留属性语法的同时公开属性,我该怎么做?
创建一个继承AppCompatActivity的类,实现如下接口。
interface MyInterface {
fun getSupportFragmentManager: FragmentManager // Option 1 Boo!
val supportFragmentManager: FragmentManager // Option 2 Yey!
}
选项 1 可以正常工作。 MyActivity 已经包含一个名为 getSupportFragmentManager() 的函数,因此我不必实现它。
选项 2 将提示我实现缺少的属性,这样做会导致以下结果
class MyActivity: AppCompatActivity(), MyInterface {
override val supportFragmentManager: FragmentManager
get() = TODO("Not yet implemented")
}
这会给我一个错误,因为类中已经有一个具有相同签名的函数。
Accidental override: The following declarations have the same JVM signature (getSupportFragmentManager()Landroidx/fragment/app/FragmentManager;):
fun <get-supportFragmentManager>(): FragmentManager defined in com.my.project.MyActivity
fun getSupportFragmentManager(): FragmentManager defined in com.my.project.MyActivity
关于如何在整个接口中保持 Kotlins 属性语法的任何想法?
【问题讨论】:
-
为什么不同时使用 get 和 set 并从界面中删除乐趣? override val supportFragmentManager: FragmentManager get() = TODO("尚未实现") set() = //你的代码?
-
我不明白你的意思。我仍然遇到同样的冲突。如果我添加一个 getter 并且我想返回具有相同名称的属性,
supportFragmentManager,它将尝试在循环中返回自身。但更重要的是,我需要它来实现该属性已经实现并使用该实现。
标签: android kotlin syntax interface overriding