对于接口,我想添加一个返回具体实现对象的函数。
所以使用界面:
interface Content {
fun <???> cloneMe(): ?
}
和班级
class Music: Content
class Video: Content
cloneMe()
类的函数Music
应返回Music
对象,cloneMe()
类的函数Video
应返回{{1}对象。
我最接近的是:
Video
然后我可以做
interface Content {
fun <T: Content> cloneMe(): T
}
class Music : Content {
override fun <T : Content> cloneMe(): T {
return Music() as T
}
}
这里的问题是我必须做一个未经检查的演员,这样才能让我能够做到这一点。 (即将编译)做
val music: Music = Music().cloneMe<Music>()
这是有问题的。
实现这一目标的最佳途径是什么?
答案 0 :(得分:4)
通常,这也可以通过参数化Content
接口来完成,如下所示:
interface Content<T : Content<T>> {
fun cloneMe(): T
}
实施:
class Music : Content<Music> {
override fun cloneMe(): Music {
return Music()
}
}
答案 1 :(得分:2)
您尝试实现的内容与任何泛型无关。相反,您可以直接使用该类型并实现更详细的覆盖。
interface Content {
fun cloneMe(): Content
}
class Music : Content {
override fun cloneMe() = Music()
}