首页 文章

创建未知类型的子类的新实例

提问于
浏览
2

我有一个班,测量

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() 操作员的乐趣,例如英寸:

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"
}

Length是一个扩展Measurement的简单抽象类 .

我想 -Inches(5) 返回 Inches(-5) ,但对于我创建的任何其他类都有,例如 -Degrees(30) 返回 Degrees(-30) . 这有可能吗?我尝试过泛型,最终成了死路一条 .

1 回答

  • 1

    如果您使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
      }
    }
    

相关问题