Scala:获得干净的类名

时间:2013-12-10 01:31:48

标签: 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$。 有没有更简单的方法呢?

更新

在没有继承的情况下工作:

import scala.reflect.ClassTag
class SomeClass {
  private[this] lazy val _name: String = implicitly[ClassTag[this.type]].runtimeClass.getSimpleName
  def name: String = _name
}

但是这会在子类中返回相同的名称:

class SomeOtherClass extends SomeClass {}
object SomeOtherClass extends SomeOtherClass
SomeOtherClass.name// is still SomeClass

1 个答案:

答案 0 :(得分:2)

有一个问题:

https://issues.scala-lang.org/browse/SI-2034

您是否需要课程本身或类型名称?因为这就是反思。

该政策不是讨论宗教,政治或名称改造。