1

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

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

4

1 回答 1

2

“你拿错了。”

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

此外,您已经ClassmainClass. 如果你想一定要使用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[_],或者Class<?>在 Java 表示法中)。

于 2013-08-21T09:50:25.627 回答