怎么弄清楚scala中的实际类型?

时间:2014-09-01 05:51:54

标签: scala types traits

有一个类型声明的特征。我无法弄清楚实际的SomeType类型是什么?这是代码:

package someModel {
    trait SomeTrait extends Serializable {
            type SomeType
            def id: SomeType
        }    
}

重要提示

  • someModel文件中没有导入。
  • Serializable是scala.Serializable
  • type SomeType仅显示在SomeTrait 中。不是文件中的某个地方。

2 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,SomeType不是实际类型(尚未),它是抽象类型成员,抽象,因为混合类必须提供它的实现:

trait SomeTrait extends Serializable {
  type SomeType
  def id: SomeType
}

class SomeClass extends SomeTrait {
  type SomeType = Int

  def id: SomeType = 1
}

class SomeOtherClass extends SomeTrait {
  type SomeType = Long

  def id: SomeType = 2L
}

对于泛型和类型成员之间的区别,this great SO帖子

答案 1 :(得分:1)

我真的不明白你问题中的“实际类型”是什么意思。

  1. 如果你想知道SomeType将会是什么,那是不可能的,因为它尚未宣布。

  2. 如果您在编译时期间询问如何引用某些SomeType实例的SomeTrait,那么只需致电foo.SomeType其中{ {1}}是foo

  3. 如果在运行时期间需要删除类型信息,则必须使实例在某些内容中携带它。 Here sees how to do it.

  4. 我希望我有你的想法:)