Убедитесь, что параметрический тип имеет сопутствующий объект

Я хотел бы сделать что-то вроде этого (и, пожалуйста, не спрашивайте почему):

trait A[T /* tell that there exists companion for T */] {
    def f = T.g
}

Можно ли этого добиться?

1 ответ

Решение

Это невозможно из коробки. Вам придется использовать решение на основе макросов. Я случайно опубликовал суть такого решения некоторое время назад.

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

def getCompanion[T: HasCompanion] = HasCompanion[T].companion

Однако вы не можете использовать границы контекста для параметра типа признака.

Другие вопросы по тегам