我有一个具有某些类型别名定义的Object:
case class MyCaseClass(someType: SomeType)
object MyObject extends SomeType {
type SomeType = Int => Boolean
}
IntelliJ告诉我,我必须导入SomeType,以便我的case类可以看到它,但后来编译器不满意并抱怨import语句的非法循环引用。我有几个其他对象声明如下:
object MyModule {
object Obj1 { ... }
object Obj2 { ... }
object Obj3 { ... }
}
每个Obj都引用MyObject中定义的类型别名。
是否有最佳实践来封装类型?我应该将它们移动到特征中还是被视为滥用?建议?
答案 0 :(得分:3)
您对象MyObject
尝试从自己定义的类型继承。
object MyObject extends SomeType {
type SomeType = Int => Boolean
}
所以,首先要做的是至少在MyObject
之外定义它:
type SomeType = Int => Boolean
object MyObject extends SomeType {
def apply(v1: Int): Boolean = ???
}
现在,由于你的问题信息很少,我建议你考虑一下你的设计。确定引用SomeType
的位置,以及需要显示的位置。之后,您可以将其放入包级别的包对象中,以便所有引用方都可以看到它。