我有一个类,测量

package robokt.measurement

abstract class Measurement : Number() {
    /**
     * The abbreviation for this unit of measurement
     */
    abstract val units: String
    /**
     * The abbreviation for this unit of measurement
     */
    abstract val value: Number
}

鉴于还有其他实现度量的类,例如英寸,如何实现unaryMinus()运算符fun?
package robokt.measurement.length

class Inches(override val value: Number) : Length() {
    override fun toCentimeters() = Centimeters(toDouble() * 2.54)

    override fun toFeet() = Feet(toDouble() / 12)

    override fun toInches() = this

    override fun toMeters() = Meters(toDouble() * 0.0254)

    override val units: String = "in"
}

长度是扩展Measurement的简单抽象类。

我想让-Inches(5)返回Inches(-5),但对于我创建的任何其他类都具有该属性,例如-Degrees(30)返回Degrees(-30)。有什么办法可行吗?我已经尝试过泛型,但最终却陷入了僵局。

最佳答案

如果使Measurement可克隆,则可以对其进行克隆并将其转换(LOL)到Measurement

abstract class Measurement : Cloneable {
  abstract val units: String
  abstract val value: Number

  fun unaryMinus() : Measurement {
      val measurement = this.clone() as Measurement
      return measurement
  }
}

关于kotlin - 创建未知类型子类的新实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48723880/

10-11 07:00