Я пытаюсь реализовать универсальный адаптер для Android в Scala. Это мои классы:Ошибка параметра типа Scala, а не член параметра типа
class ScalaAdapter[A <: AnyRef](context: Context, resource: Int, objectsList: ArrayBuffer[A], adapterCb: AfAdapterItemCb) extends BaseAdapter with Filterable {...}
И черта, которая каждый пользователь адаптер должен реализовать это:
trait AfAdapterItemCb {
def itemCb[A](item: A, view: View) {}
}
Моя модель класса:
case class ScheduleItem(name: String, priority: Int)
Когда я реализую Обратного Я получаю сообщение об ошибке, связанной с параметром типа:
private class AdapterCbImpl extends AfAdapterItemCb {
override def itemCb[ScheduleItem](schedule: ScheduleItem, view: View) = {
view.findViewById(R.id.tv_name).asInstanceOf[TextView].setText(schedule.name)
view.findViewById(R.id.tv_priority).asInstanceOf[TextView].setText(schedule.priority.toString)
}
}
Когда я пытаюсь использовать объект график, чтобы заполнить вид, я получаю сообщение об ошибке:
value name is not a member of type parameter ScheduleItem
value priority is not a member of type parameter ScheduleItem
Я не мог понять манифеста, чтобы исправить это. Кто-нибудь понимает, в чем проблема?
Стоит отметить, что это называется _shadowing_, и может быть [очень] (HTTP: // StackOverflow. com/a/14023882/334519) [раздражает] (http://stackoverflow.com/a/13830404/334519). –
@TravisBrown: Я забыл искать существующие ответы, моя вина. – senia
Большое спасибо. Он работает сейчас. То есть, когда мы используем общие типы (T), мы должны использовать match-case? Мы не можем использовать указанный тип вместо T? – Srinivas