Я пытаюсь смоделировать ADT для представления свойств с возможностью установки значения по умолчанию.Ошибка ввода типа с несколькими параметрами типа и ничего
Итак, мое определение типа заключается в следующем, так что я могу шаблон матч на тип:
trait PropertyType[U] {
def typeName: String
}
case object OInt32 extends PropertyType[Int] {
override def typeName: String = "Edm.Int32"
}
case object OString extends PropertyType[String] {
override def typeName: String = "Edm.String"
}
Теперь само свойство параметрироваться PropertyType
, а в качестве параметра:
case class Property[T <: PropertyType[U], U](name: String,
propertyType: T,
nullable: Boolean = true,
maxLength: Option[Integer] = None,
defaultValue: Option[U] = None)
Тип вывода работает в том случае, если оба параметра присутствуют, то есть следующий код компилирует штраф:
val intProp = Property("Integer", propertyType = OInt32, defaultValue = Some(123))
val stringProp = Property("String", propertyType = OString, defaultValue = Some("123"))
Кроме того, это мешает мне установить неправильное значение по умолчанию для указанного типа, поэтому следующее не будет компилироваться.
val stringProp = Property("String", propertyType = OString, defaultValue = Some(123))
вопрос я имею с выводом, что если я опускаю значение по умолчанию или установить его в None, компиляция терпит неудачу как тип U не может быть выведен:
val stringPropWithDefault = Property("String", propertyType = OString) //Doesn't compile
val stringPropWithDefault = Property[OString.type, String]("String", propertyType = OString) //Compiles
Can Scala компилятором типа Infer, если только один параметр присутствует?