Scala:从字符串生成类

时间:2013-08-21 09:21:14

标签: string class scala

我想从String中动态创建一个Class。

String具有Class的确切名称(顺便说一下是Java类)

例如

val classString = "gui.MainFrame"

我用

创建了这个类
val mainClass: Class[_] = Class.forName(classString)

Scala创建了这个类,但是如果我想使用这个类,例如

AppExecutor.executeNoBlock(classOf[mainClass])

Scala告诉我无法找到类型mainClass。

如果我以这种方式使用它

AppExecutor.executeNoBlock(mainClass.asInstanceOf)

它说 java.lang.Class无法强制转换为scala.runtime.Nothing $ 那么我现在该如何使用这门课呢?

1 个答案:

答案 0 :(得分:2)

“你说错了。”

classOf接受一个类型参数并返回一个Class对象。您不能将Class对象作为类型参数传递,因此会出错。

此外,您已在Class中拥有mainClass个对象。如果您想使用classOf,可以这样做:

val mainClass = classOf[gui.MainFrame]

代替。但是否则你应该坚持你以前的方法,即:

val mainClass = Class.forName(classString)

如果您尝试使用的代码是org.jemmy.fx.AppExecutor,则可以直接使用mainClass调用它:

AppExecutor.executeNoBlock(mainClass.asInstanceOf[Class[_ <: javafx.application.Application]])

由于该方法显然具有限定类型参数(即,不是普通的通配符Class[_],或Java符号中的Class<?>)。