Все аннотации, такие как @tailrec и @inline, только во время компиляции. Они расширяют StaticAnnotation, которая является AFAIK, единственной поддержкой аннотаций в Scala, и они не будут сохраняться во время выполнения. Я думаю, что философия состоит в том, чтобы избегать аннотаций во время выполнения, потому что они извлекаются посредством отражения, в мире, где компилятор больше не может помочь вам за пределами стандартных классов из-за стирания типов, но самое главное, потому что это время выполнения и цель это решить, что вы пытаетесь решить во время компиляции.
Посмотрите на использование аннотаций для моделирования вывода JSON, например: В Java вы будете знать, работает ли он нормально при запуске вашей программы. В Scala вы можете использовать классы типов для моделирования того, как каждый тип выражается в JSON. Если вы пропустите одно определение, компиляция скажет вам. Отличным примером является Spray-JSON .
Дейв Уиттакер приводит еще один замечательный пример в своем ответе .