我想从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 $ 那么我现在该如何使用这门课呢?
答案 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<?>
)。