Мне нужна поддержка для количества единиц. Я бы хотел, чтобы система типов максимально обеспечивала корректность единиц. Например, нельзя сочетать граммы с долларами. Я иду по пути параметризованных типов, но этот код кажется гораздо более повторяющимся, чем код Scala, который я видел у других.
abstract class UnitOfMeasure
abstract class Range[T] {
type T <: UnitOfMeasure
}
class Quantity[T <: UnitOfMeasure](value: Double)
class DefiniteRange[T<:UnitOfMeasure](lowerBound: Quantity[T], upperBound: Quantity[T]) extends Range[T]
class Confidence(conf: Double) {
require(0.0 <= conf && conf <= 1.0)
}
class ConfidenceInterval[T<:UnitOfMeasure](lowerBound: Quantity[T], upperBound: Quantity[T], confidence: Confidence) extends Range[T] {
def this(lower: Quantity[T], upper: Quantity[T]) = this(lower, upper, new Confidence(.90))
}
Есть ли более чистый способ сделать это? Ударная битва "T <: UnitOfMeasure" - это главное, что меня беспокоит. </p>