有一个类型声明的特征。我无法弄清楚实际的SomeType
类型是什么?这是代码:
package someModel {
trait SomeTrait extends Serializable {
type SomeType
def id: SomeType
}
}
重要提示
type SomeType
仅显示在SomeTrait
中。不是文件中的某个地方。答案 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)
我真的不明白你问题中的“实际类型”是什么意思。
如果你想知道SomeType
将会是什么,那是不可能的,因为它尚未宣布。
如果您在编译时期间询问如何引用某些SomeType
实例的SomeTrait
,那么只需致电foo.SomeType
其中{ {1}}是foo
。
如果在运行时期间需要删除类型信息,则必须使实例在某些内容中携带它。 Here sees how to do it.
我希望我有你的想法:)