使用SBT/Eclipse时Scala中不存在可序列化特性

使用SBT/Eclipse时Scala中不存在可序列化特性,eclipse,scala,serialization,sbt,Eclipse,Scala,Serialization,Sbt,我在Scala中有一个带有一些标记特征的层次结构。在层次结构的顶部,我声明根特征是可序列化的。再往下几层,当我谈到具体对象时,trait的继承者似乎忘记了它们是可序列化的。层次结构如下所示: trait DataModel extends Serializable // Marker trait trait StaticModel extends DataModel // Marker trait trait RectangleModel[T

我在Scala中有一个带有一些标记特征的层次结构。在层次结构的顶部,我声明根特征是可序列化的。再往下几层,当我谈到具体对象时,trait的继承者似乎忘记了它们是可序列化的。层次结构如下所示:

trait DataModel extends Serializable              // Marker trait
trait StaticModel extends DataModel               // Marker trait
trait RectangleModel[T] extends StaticModel {     // Trait with type param
  def rows: Int
  def columns: Int
  def apply(row: Int, column: Int): Option[T]
}

object MakeRectangleModelFromFile {               // Factory object
  def apply(file: File): RectangleModel[String] = 
    new RectangleModel[String] {                  // Anonymous class that
      def rows = 2                                // implements the trait.
      def columns = 3
      def apply(row:Int, column:Int): Option[String] = Some("One")
    }
}

val x = MakeRectangleModelFromFile(null)          // Make object using factory.
println(x.isInstanceOf[Serializable])             // Object should be Serializable!
当我从命令行(Scala 2.10.3)编译并运行时,最后一条语句会按预期输出“true”。当我在Eclipse中使用Scala IDE for Eclipse以及由SBT 0.13创建的项目执行相同操作时,我得到“false”。具体的数据模型似乎忘记了它是可序列化的。如果我提醒它是可序列化的,请按如下方式构造它:

new RectangleModel[String] with Serializable {
  ...
}
一切又好了!我想知道SBT缓存中是否有可疑的东西,可能与该特征是泛型有关。我已经用RectangleModel的一个命名子类生成了一个类似的示例,所以我认为这个类是匿名的并没有问题

当我第一次编写RectangleModel[T]trait时,我忘了让它扩展StaticModel,所以有一段时间编译器是正确的。但现在编译器似乎记住了之前的时间。甚至当我缩放这个东西时,Scaladoc显示矩形模型是可序列化的


关于如何清除这些旧的、坏的内存,有什么线索吗?

您是否尝试过“sbt clean”?您是否介意在GitHub上共享代码,以便开始项目并修复它所需的一切都是克隆它?您是否尝试过sbt clean。还试图篡改代码,以使其强制重新编译。将尝试将代码获取到GitHub。