【发布时间】:2021-05-18 12:14:50
【问题描述】:
我正在将 Scala 与 Java 库一起使用,该库期望通过 public static void main(java.lang.String[]) 传递一个类,以便它可以通过反射运行调用它以进行集成测试。
object RestServer {
def main(args: Array[String]): Unit = { /* run the server */ }
}
由于this answer to another question 中描述的行为,它被编译为两个类。
public final class com.example.RestServer$ {
public static final com.example.RestServer$ MODULE$;
public static {};
public void main(java.lang.String[]);
}
和
public final class com.example.RestServer {
public static void main(java.lang.String[]);
}
当我把课程传给图书馆时
@IntegrationTest(main = classOf[RestServer.type])
class MyTests extends RapidoidIntegrationTest { }
我实际上传递的是 object 单例实例 (RestServer$),而不是具有 static void main() 方法的 RestServer 类。
这不会有问题,除非库在调用它之前验证它正在调用的方法是 public 和 static 吗?
我怎样才能获得RestServer 类呢?
【问题讨论】:
-
@MateuszKubuszok
classOf[RestServer]无法编译。not found: type RestServer -
是否可以选择定义一个空的伴随类
RestServer?否则我认为你被卡住了。 -
@Jasper-M 这是一个选项,是的,但我不明白这有什么帮助。我更像是一个 CLR,而不是一个 JVM。
-
那么你可以使用
classOf[RestServer],因为这样RestServer类“存在”到Scala。
标签: java scala reflection