복붙노트

[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

나는 그것을 해결하기 위해 매니페스트를 이해할 수 없었다. 사람이 문제가 무엇인지 이해하고 있습니까?

해결법

  1. ==============================

    1.트래비스 브라운 언급 한 바와 같이, 이것은 그림자라고하며, 매우 성가신 수 있습니다.

    트래비스 브라운 언급 한 바와 같이, 이것은 그림자라고하며, 매우 성가신 수 있습니다.

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

    ScheduleItem 여기이 경우 클래스 ScheduleItem에 아무것도 단지 T.처럼 형식 매개 변수의 이름입니다.

    당신은 구체적인 유형을 사용하여 형식 매개 변수와 메소드를 오버라이드 (override) 할 수 없다.

    나는 AfAdapterItemCb을 사용하는 방법을 알고하지 않습니다,하지만 당신은 이런 식으로 뭔가를 시도 할 수 있습니다 :

    override def itemCb[T](item: T, view: View) = item match {
      case schedule: ScheduleItem => ... //your code
      case _ => ... // item is not a ScheduleItem
    }
    
  2. from https://stackoverflow.com/questions/16489716/scala-type-parameter-error-not-a-member-of-type-parameter by cc-by-sa and MIT license