2015-05-26 1 views
2

Я пытаюсь использовать scala-pickling для моего проекта; но у меня проблема с этим. пусть предположим, что у меня есть этот код:У меня есть ошибка для генерации pickler/unpickler для типа с параметром типа

import scala.pickling._ 
import scala.pickling.Defaults._ 
import scala.pickling.json._ 

sealed trait State 
case class Married(name:String) extends State 
case object Single extends State 

trait Person[T<:State] { 
    def name:String 
    def surname:String 
    def age:Int 
    def state:T 
} 

case class Male[T<:State](
    val name:String, 
    val surname:String, 
    val age:Int, 
    val state:T) extends Person[T] 

case class Female[T<:State](
    val name:String, 
    val surname:String, 
    val age:Int, 
    val state:T) extends Person[T] 


def hideType[T<:State]:Person[T] = Male("Hussein", "?", 145, Single).asInstanceOf[Person[T]] 

Когда я пытаюсь hideType.pickle, я получаю ошибку компиляции:

error: Cannot generate a pickler for Person[T]. Recompile with -Xlog-implicits for details 

В чем проблема для генерации Pickler/Unpickler в Это дело? более

информация:

2.11.6 Скала

-травление Скала 0.10.0

EDIT 1:

результат компиляции с "-Xlog-implicits":

[info] Loading global plugins from /home/someone/i/etc/sbt/0.13/plugins 
[info] Loading project definition from /home/someone/tmp/pickling/project 
[info] Set current project to pickling (in build file:/home/someone/tmp/pickling/) 
[info] Compiling 1 Scala source to /home/someone/tmp/pickling/target/scala-2.11/classes... 
[info] /home/someone/tmp/pickling/src/main/scala/com/example/Hello.scala:35: genPickler is not a valid implicit value for scala.pickling.Pickler[com.example.Person[T]] because: 
[info] hasMatchingSymbol reported error: stepping aside: repeating itself 
[info] hideType.pickle 
[info]   ^
[info] /home/someone/tmp/pickling/src/main/scala/com/example/Hello.scala:35: genPickler is not a valid implicit value for scala.pickling.Pickler[com.example.Person[T]] because: 
[info] hasMatchingSymbol reported error: polymorphic expression cannot be instantiated to expected type; 
[info] found : [T]scala.pickling.Pickler[T] 
[info] required: scala.pickling.Pickler[com.example.Person[?]] 
[info] hideType.pickle 
[info]   ^
[error] /home/someone/tmp/pickling/src/main/scala/com/example/Hello.scala:35: Cannot generate a pickler for com.example.Person[T]. Recompile with -Xlog-implicits for details 
[error] hideType.pickle 
[error]   ^
[error] one error found 
[error] (compile:compileIncremental) Compilation failed 
[error] Total time: 2 s, completed May 26, 2015 4:31:45 AM 
+0

Вы пытались перекомпилировать его с '-Xlog-implicits', как сообщение об ошибке говорит вам? Каков был результат? – mcveat

ответ

0

Я не уверен, что такое но вы получили общую переменную.

Попробуйте

hideType[State].pickle 

или

hideType[Married].pickle