Учитывая экземпляр класса, очевидно, можно вернуть его имя:Scala: получение имени класса черта смешивается в
trait MixedInClassDiscovery {
val className = this.getClass.getName
}
class AClass extends MixedInClassDiscovery {
...
this.className // returns "AClass"
...
}
Но этот способ использует отражение, один раз для каждого экземпляра AClass
. Можно ли одно и то же сделать для каждого класса?
Одним из решений, которое приходит на ум, является смешение его в сопутствующих объектах вместо самих классов.
Нет, этот код по-прежнему вызывает отражение для каждого экземпляра. Собственно, для каждого вызова 'className', хотя это может быть тривиально исправлено. –