我有一个包含main方法的类,我希望启动一个运行该类的新进程。
但是当我尝试使用Scala来获取此类的名称时,它给了我错误的名称。例如:
object Test {
def main(args: Array[String]) = {
println(Test.getClass.getCanonicalName)
}
}
然后:
roei@roei-main:~/Java$ scalac Test.scala
roei@roei-main:~/Java$ scala Test
Test$
roei@roei-main:~/Java$ javap Test*.class
Compiled from "Test.scala"
public final class Test {
public static void main(java.lang.String[]);
}
Compiled from "Test.scala"
public final class Test$ {
public static final Test$ MODULE$;
public static {};
public void main(java.lang.String[]);
}
Test.getClass.getCanonicalName
给了我Test$
,不是 Test
。但是静态main方法在名为Test
的类内部,而Test$
包含非静态main。显然,我可以只删除最后的$
,但是我正在寻找更令人满意/更可靠的解决方案。
答案 0 :(得分:2)
可能的解决方案是使用ClassTag
(see API)中的scala.reflect
。我的意思是这样的:
import scala.reflect.ClassTag
import scala.reflect.classTag
class Test
object Test {
def main(args: Array[String]) = {
println(Test.getClass.getCanonicalName)
println(classTag[Test].runtimeClass.getCanonicalName)
}
}
它将打印:
Test$
Test