Доступ к участникам типа вне класса в Scala

Я пытаюсь понять участников типа в Scala. Я записал простой пример, который пытается объяснить мой вопрос.

Во-первых, я создал два класса для типов:

class BaseclassForTypes
class OwnType extends BaseclassForTypes

Затем я определил участника абстрактного типа в черте и затем определил участника типа в concerete классе:

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

Так, есть ли лучший способ сделать это, или участники типа предназначены, чтобы использоваться только с внутренней реализацией класса?

7
задан Pekka Mattila 23 March 2010 в 09:37
поделиться

2 ответа

Вы можете использовать ScalaTypesTestImpl # T вместо typeTest.T или

val typeTest:ScalaTypesTest = new ScalaTypesTestImpl
val typeObject:ScalaTypesTest#T = typeTest.returnType
7
ответ дан 7 December 2019 в 01:19
поделиться

Если вы не хотите использовать экземпляр ScalaTypesTestImpl , то, возможно, вам лучше поместить T в объект вместо ] класс . Для каждого экземпляра x из ScalaTypesTestImpl , x.T является другим типом. Или, другими словами, если у вас есть два экземпляра x и y , то x.T не того же типа, что и y.T .

3
ответ дан 7 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: