Play框架表单中的Scala奇怪类型错误

时间:2016-03-30 09:18:57

标签: scala playframework

我有这段代码:

package deliveries.NewPost
import play.api.data._
import play.api.data.Forms._

case class NewPostValidator(town: String, number: Int)

object NewPost extends Delivery{
  def form[NewPostValidator](): Form[NewPostValidator] = Form(mapping(
    "town" -> nonEmptyText,
    "number" -> number)(NewPostValidator.apply)(NewPostValidator.unapply))
}

在编译时它给我一个奇怪的错误:

  

类型不匹配; [错误]发现:   play.api.data.Mapping [deliveries.NewPost.NewPostValidator] [错误]   必需:play.api.data.Mapping [NewPostValidator]

基本上,同一个班级以完整路径显示且没有完整路径。 它能是什么?

我将澄清我想要实现的目标: 我希望每个类扩展trait都有方法“form”,返回Form,里面有一些验证器。为此,我创造了特质:

trait Delivery {
  def form[T](): Form[T]
}

并尝试在我的课程中实现此方法。

1 个答案:

答案 0 :(得分:1)

Table2就像说def form[NewPostValidator],只是使用不同的标识符。编译器没有在方法体中看到NewPostValidator作为" real" NewPostValidator,但作为您在def form[T]中声明的伪造类型NewPostValidator。

解决方案:

使用[T]而不是您的方法对您的特征进行参数化,并让您的类使用特定类型扩展特征。

def form[NewPostValidator]