繁体   English   中英

如何找出scala中的实际类型?

[英]How figure out what actual type in scala?

类型声明有一个特征。 我不知道实际的SomeType类型是什么? 这是代码:

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

重要笔记

  • someModel文件中没有导入。
  • 可序列化是scala.Serializable
  • type SomeType SomeTrait 出现在SomeTrait 不在文件中。

如果我正确理解了您的问题, SomeType还不是实际类型,它是抽象类型member ,则是abstract,因为混合类必须为其提供实现:

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
}

对于泛型和类型成员之间的区别,有一个很棒的SO帖子

我不太了解您问题中的“实际类型”是什么意思。

  1. 如果您想知道SomeType将会是什么,那是不可能的,因为尚未声明。

  2. 如果你问如何引用SomeType一些SomeTrait编译时实例,然后只需调用foo.SomeType其中fooSomeTrait

  3. 如果在删除类型信息的运行时需要它,则必须使实例将其携带在某些东西中。 在这里看到如何做。

我希望我有你的主意:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM