我想创建一个带有打印方法的接口,该方法将打印一个带后缀的值。 所以:
interface Unitary<T>{
val value: T
fun print(){
print(value)
println(suffix)
}
}
interface HasSuffix{
val suffix: String
}
inline class Centimeters(val value: Double): Unitary<Double>{
companion object: HasSuffix{
override val suffix = "cm"
}
}
当前我收到错误:
未解决的参考文献:后缀
是否有一种方法可以表明后缀将在任何实现接口的伴随对象上声明?
答案 0 :(得分:5)
是否有一种方法可以表明后缀将在任何实现接口的伴随对象上声明?
我认为没有。
您可以使用以下方法解决此问题:
interface Unitary<T>{
val value: T
fun suffixProvider() : SuffixProvider
fun print(){
print(value)
println(suffixProvider().suffix)
}
}
interface SuffixProvider{
val suffix: String
}
inline class Centimeters(override val value: Double): Unitary<Double>{
companion object: SuffixProvider{
override val suffix = "cm"
}
override fun suffixProvider() = Centimeters
}
答案 1 :(得分:2)
您不能强迫子类通过伴侣对象提供特定的功能。相反,您可以强制它们提供特定的方法。类如何实现此方法取决于他们。