为什么Scala编译器在将Kotlin密封类传递给构造函数时给我一个错误?

我有一个密封的课,写在科特林:

sealed class Schema { class RecordSchema(val fields: List<Field>): Schema() class ArraySchema(val elementSchema: Schema): Schema() ... } 

另一个将RecordSchema作为参数的类:

class Enrichment(config: Config, val schema: RecordSchema) { ... }

在Scala中,我有一个类,其中包含一个RecordSchema实例,然后创建一个Enrichment实例。

 object Job { def main(args: Array[String]): Unit = { /// some initializing of resources... and then... val recordSchema = schemas.getSchema(id) // type is Schema.RecordSchema val enrichment = Enrichment(config, recordSchema) // this is where scalac errors out } } 

scala编译器最终打印出这个错误信息:

 Error:(52, 62) type mismatch; found : com.companyname.enricher.schemas.com.companyname.enricher.schemas.com.companyname.enricher.schemas. required: com.companyname.enricher.schemas.(some other)com.companyname.enricher.schemas.com.companyname.enricher.schemas. val enrichment = new Enrichment(config, recordSchema) 

如果我使用asInstanceOf施放recordSchemaasInstanceOf我得到另一个,不是很有用,错误:

 Error:(52, 62) type mismatch; found : com.companyname.enricher.schemas.Schema.RecordSchema required: com.companyname.enricher.schemas.com.companyname.enricher.schemas. val enrichment = new Enrichment(config, recordSchema.asInstanceOf[RecordSchema]) 

总的来说,我不知道为什么会这样。 如果我让构造函数把父类作为参数而不是嵌套类,它编译就好(这是我现在的解决方法)。 如果我做同样的事情,除了用Java而不是Kotlin编写源代码,这个错误不会发生。 我使用Java 1.8,Kotlin 1.0.4,Scala 2.11.8。

更新:

在这里显示的bug: https : //github.com/mjburghoffer/scala-kotlin-innerclass-bug/tree/master

看起来Kotlin为这种情况生成了不同数量的类。 我编译了Java和Kotlin源代码,发现Java有额外的文件ParentSealedJava$1.class 。 Java和Kotlin中的ParentSealed类的字节码非常相似(我使用javap -c检查字节码),所以我认为Scala编译器依赖某种方式在Kotlin中丢失的文件。