Scala 类型参数错误,不是类型参数的成员 [英] Scala type parameter error, not a member of type parameter

查看:44
本文介绍了Scala 类型参数错误,不是类型参数的成员的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在 Scala 中为 Android 实现一个通用适配器.这些是我的课程:

I am trying to implement a generic Adapter for Android in Scala. These are my classes:

class ScalaAdapter[A <: AnyRef](context: Context, resource: Int, objectsList: ArrayBuffer[A], adapterCb: AfAdapterItemCb) extends BaseAdapter with Filterable {...}

Adapter 的每个用户必须实现的 trait 是:

And the trait which every user of Adapter has to implement is:

trait AfAdapterItemCb {
  def itemCb[A](item: A, view: View) {}
}

我的模型类是:

case class ScheduleItem(name: String, priority: Int)

当我实现回调特征时,我收到与类型参数相关的错误:

When I am implementing the Callback trait, I am getting an error related to type parameter:

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

当我尝试使用计划对象来填充视图时,出现错误:

When I try to use a schedule object to fill the view, I am getting an error:

value name is not a member of type parameter ScheduleItem
value priority is not a member of type parameter ScheduleItem

我无法理解 Manifest 来修复它.有人明白问题出在哪里吗?

I could not understand Manifest to fix it. Does someone understand what the problem is?

推荐答案

正如 Travis Brown 所指出的,这是称为shadowing,并且可以极端 烦人.

As Travis Brown noted, this is called shadowing, and can be extremely annoying.

override def itemCb[ScheduleItem](schedule: ScheduleItem, view: View) = {

ScheduleItem 这里是一个类型参数名,就像T.它与 case class ScheduleItem 没有任何关系.

ScheduleItem here is a type parameter name, just like T. It have nothing with case class ScheduleItem.

您不能使用具体类型覆盖带有类型参数的方法.

You can't override method with type parameter using concrete type.

我不知道如何使用 AfAdapterItemCb,但您可以尝试这样的操作:

I don't know how to use AfAdapterItemCb, but you could try something like this:

override def itemCb[T](item: T, view: View) = item match {
  case schedule: ScheduleItem => ... //your code
  case _ => ... // item is not a ScheduleItem
}

这篇关于Scala 类型参数错误,不是类型参数的成员的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆