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

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

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

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


person vonaka    schedule 18.11.2017    source источник


Ответы (1)


Из коробки это невозможно. Вам придется использовать решение на основе макросов. Недавно я опубликовал суть такого решения.

Вы можете использовать его следующим образом:

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

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

person Jasper-M    schedule 18.11.2017