При выкапывании кажется, что это чувствительная проблема.Scala: Получение чистого имени класса
class TestNames {
private[this] lazy val _name: String = this.getClass.getName.split("\\.").last
def name: String = _name
}
class Parent extends TestNames
class Parent2 extends Parent
class ClassNameExtraction extends FlatSpec {
it should "correctly extract the table name" in {
object TestNames extends TestNames
assert(TestNames.name === "TestNames")
}
it should "correctly extract the parent name" in {
object Parent extends Parent
assert(Parent.name === "Parent")
}
it should "correctly extract the column names" in {
object Parent2 extends Parent2
assert((Parent2.name === "Parent2"))
}
}
Я могу видеть, что есть простая схема: $$annonfun$number$ + ACTUAL_CLASS_NAME + $number$
. Есть ли более простой способ сделать это?
Update:
Got что-то работает без наследования:
Однако это возвращает то же имя в подразделах классах:
class SomeOtherClass extends SomeClass {}
object SomeOtherClass extends SomeOtherClass
SomeOtherClass.name// is still SomeClass
Я подозреваю, что часть проблемы связана с самим тестом. Попробуйте переместить 'TestNames',' Parent' и 'Parent2' за пределы теста, имея некоторый' val' в тестовой точке для '* .name' и сравните' val' вместо '* .name'. –
Вы также можете экспериментировать без «ленивых». –