String Scala:从字符串生成类

String Scala:从字符串生成类,string,class,scala,String,Class,Scala,我想从字符串动态创建一个类 字符串具有类的确切名称(顺便说一句,是Java类) 比如说 val classString = "gui.MainFrame" 我用 val mainClass: Class[_] = Class.forName(classString) Scala创建了这个类,但是如果我想将这个类用于 AppExecutor.executeNoBlock(classOf[mainClass]) Scala告诉我找不到类型mainClass 如果我那样使用它 AppExecut

我想从字符串动态创建一个类

字符串具有类的确切名称(顺便说一句,是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$ 那么我现在如何使用这个类呢?

“你拿错了。”

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

另外,在
mainClass
中已经有了
Class
对象。如果需要使用
classOf
,可以执行以下操作:

val mainClass = classOf[gui.MainFrame]
相反。但除此之外,您应该坚持以前的方法,即:

val mainClass = Class.forName(classString)
如果您试图使用的代码是
org.jemmy.fx.AppExecutor
,您可以直接使用
mainClass
调用它:

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

AppExecutor.executeNoBlock(mainClass.asInstanceOf[Class[u]是的,你是对的,我想使用Jemmy的AppExecutor,我知道我可以用“mainClass”直接调用它,但问题是,“mainClass”的值不应该每次都是相同的。它应该是可变的,这样用户就可以输入另一个使用AppExecutor的startet类。所以我不能使用val mainClass=classOf[gui.MainFrame],因为它不是可变的。@AKR:就像我说的,您仍然可以使用
Class.forName(classString)
如果是这种情况,问题在于如何调用
executeNoBlock()
。我这样尝试:“val mainClass=Class.forName(mainclasstring)”然后是“AppExecutor.executeNoBlock(mainClass)”,但这会导致错误消息”-重载了方法值executeNoBlock,并提供了以下选项:(x$1:Class)[@AKR。那是另一个故事。我不确定我的演员阵容是否正确,但请看我的编辑。没问题。谢谢你的建议接受答案,我是stackoverflow新手,所以我现在还没有掌握这个精彩网站的所有功能。。)