У меня есть следующая проблема с системой типов scala, и я в настоящее время не знаю, как это исправить.
В основном существует следующая ситуация:
У меня есть класс, давайте вызовемэто актер.Этот класс является шаблонным.
class Actor[T](){
def setValue(value: T): Int = {
//do something with value
}
}
В другом классе есть метод, который выполняет итерацию по HashMap следующего типа:
var newValues = new HashMap[String, Any]()
Этот HashMap будет содержать значения типа Int и String.Ключ HashMap идентифицирует конкретный класс Actor и гарантирует, что тип значения соответствует шаблонному классу Actor, к которому он относится.
Метод другого класса выполняет итерацию по этому HashMap:
newValues.foreach(
kv => {
db.getActor(kv._1).setValue(kv._2) //db.getActor returns an Actor identified by kv._1
}
)
Поскольку конкретное значение (kv._2) имеет тот же тип данных, что и шаблонный класс, полученный во время выполнения, я думал, что механизм scala сможет привести любой тип к конкретному подтипу T.
Но я получаю следующую ошибку во время компиляции:
found : kv._2.type (with underlying type Any)
required: _$3 where type _$3
db.getActor(kv._1).setValue(kv._2)
Кто-нибудь знает, как решить эту проблему?Я подумал, используя супер-тип Any, можно было бы обойти коммутатор и использовать asInstanceOf [T] объекта Any.
Надеюсь, кто-нибудь может мне помочь!