Я пытаюсь понять членов типа в Scala. Я написал простой пример, который пытается объяснить мой вопрос.
Сначала я создал два класса для типов:
class BaseclassForTypes
class OwnType extends BaseclassForTypes
Затем я определил абстрактный член типа в trait, а затем определил член типа в конкретном классе:
trait ScalaTypesTest {
type T <: BaseclassForTypes
def returnType: T
}
class ScalaTypesTestImpl extends ScalaTypesTest {
type T = OwnType
override def returnType: T = {
new T
}
}
Затем я хочу получить доступ к члену типа (да, тип здесь не нужен, но это объясняет мой вопрос). Оба примера работают.
Решение 1. Объявление типа, но проблема здесь в том, что он не использует член типа, а информация о типе дублируется (вызывающий и вызываемый).
val typeTest = new ScalaTypesTestImpl
val typeObject:OwnType = typeTest.returnType // declare the type second time here
true must beTrue
Решение 2. Инициализация класса и использование типа через объект. Мне это не нравится, так как класс должен быть инициализирован
val typeTest = new ScalaTypesTestImpl
val typeObject:typeTest.T = typeTest.returnType // through an instance
true must beTrue
Итак, есть ли лучший способ сделать это или члены типа должны использоваться только с внутренней реализацией класса?