return 具体实现接口中的通用函数
Generic function in interface to return concrete implementation
对于接口,我想添加一个函数,return是具体实现的一个对象。
所以有了界面:
interface Content {
fun <???> cloneMe(): ?
}
和 classes
class Music: Content
class Video: Content
Music
class 的函数 cloneMe()
应该 return 一个 Music
对象和 cloneMe()
的函数 Video
class 应该 return 一个 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>()
这里的问题是我必须做一个未经检查的转换,'allows me'(即会编译)做
class Music : Content {
override fun <T : Content> cloneMe(): T {
return Video() as T
}
}
这是有问题的。
实现此目标的最佳方法是什么?
通常这也是通过参数化 Content
接口来完成的,如下所示:
interface Content<T : Content<T>> {
fun cloneMe(): T
}
和实施:
class Music : Content<Music> {
override fun cloneMe(): Music {
return Music()
}
}
您要实现的目标与任何泛型无关。相反,您可以直接使用该类型并实现更详细的覆盖。
interface Content {
fun cloneMe(): Content
}
class Music : Content {
override fun cloneMe() = Music()
}
对于接口,我想添加一个函数,return是具体实现的一个对象。
所以有了界面:
interface Content {
fun <???> cloneMe(): ?
}
和 classes
class Music: Content
class Video: Content
Music
class 的函数 cloneMe()
应该 return 一个 Music
对象和 cloneMe()
的函数 Video
class 应该 return 一个 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>()
这里的问题是我必须做一个未经检查的转换,'allows me'(即会编译)做
class Music : Content {
override fun <T : Content> cloneMe(): T {
return Video() as T
}
}
这是有问题的。
实现此目标的最佳方法是什么?
通常这也是通过参数化 Content
接口来完成的,如下所示:
interface Content<T : Content<T>> {
fun cloneMe(): T
}
和实施:
class Music : Content<Music> {
override fun cloneMe(): Music {
return Music()
}
}
您要实现的目标与任何泛型无关。相反,您可以直接使用该类型并实现更详细的覆盖。
interface Content {
fun cloneMe(): Content
}
class Music : Content {
override fun cloneMe() = Music()
}