Scala, передающий параметры типа для возражения

В Scala v 2.7.7

У меня есть файл с

class Something[T] extends Other

object Something extends OtherConstructor[Something]

Это бросает ошибку:

класс Что-то берет параметры типа
объект Что-то расширяет OtherConstructor [Что-то] {

Однако я не могу сделать этого

object Something[T] extends OtherConstructor[Something[T]]

Это бросает ошибку:

ошибка: ';' ожидаемый, но' [' найденный.

Действительно ли возможно отправить параметры типа для возражения? Или если я изменяю и просто использую Otherconstructor

10
задан oxbow_lakes 7 April 2010 в 15:14
поделиться

3 ответа

Спасибо за ответы.

object Something extends OtherConstructor[Something[_]]

, похоже, компилируется (хотя мне еще предстоит запустить / проверить это: -))

@oxbow_lakes, я следовал вашему совету - избегать системы типов - до сих пор, но Я должен это сделать !!! Я изучал экзистенциальные типы, стирание типов и все такое, но это все еще не в моих силах: - (

1
ответ дан 4 December 2019 в 01:30
поделиться

Вы можете использовать:

object Something extends OtherConstructor[Something[_]]

Конечно, вы будете ограничены наличием экзистенциального типа без верхней границы вместо конкретного типа. Это решение может не иметь смысла, и вам может понадобиться один объект для каждого конкретного типа T , для тех T, которые вас волнуют, например

object StringSomething extends OtherConstructor[Something[String]]

Но это имеет (возможный) недостаток, заключающийся в том, что StringSomething не является сопутствующим объектом Something .

Однако я бы посоветовал не начинать возиться с проектированием общих API (особенно самореференциальных, подобных приведенному выше), если вы действительно, действительно не знаете, что делаете . Это почти наверняка закончится слезами, и существует множество CORE Java API, которые ужасны из-за того, как были добавлены дженерики ( RowSorter API на JTable является одним из примеров)

4
ответ дан 4 December 2019 в 01:30
поделиться

Объект должен иметь конкретный тип. Конструкция объекта Scala не является исключением из этого правила.

Допустимое определение:

object Something extends OtherConstructor[Something[T]] { }

, где T - некоторый конкретный тип .

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

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