斯卡拉的反思。调用方法?

时间:2011-12-27 20:37:42

标签: scala reflection

Class<?> clazz = loadClass( "Test" );
Method printSomething = clazz.getDeclaredMethod( "printSomething" );
printSomething.invoke( clazz );

我正试图弄清楚如何在Scala中执行此操作。我猜测我错过了Scala处理反射的方式。

val clazz = loadClass("Test")
val printSomething = clazz.getDeclaredMethod("printSomething")

printSomething.invoke(clazz)

我的主要问题:Any对象与Java中的Class<?>是否相同?

1 个答案:

答案 0 :(得分:4)

Any与Java中的Class<?>不同。

Any类型是Java的Object的Scala替代扩展:与Java的Object不同,它是Scala中所有内容的超类型,包括基元。

Class[_]Class[Any]的缩写)与Java的Class<?>的类型相同,即它是Scala中Java Class<?>的呈现方式。 Scala中类型Class的实例与Java中的实例一样,提供了作为其泛型参数提供的类型的基本反射功能。即Class[Something]的实例提供了类Something上的标准Java反射API。您可以像在Java中一样使用它。要获取该实例,请调用标准方法classOf[Something]instanceOfSomething.getClass

Scala 2.10提供了主要针对类型擦除问题解决方案的扩展反射功能,这些版本非常稳定,您可以随时下载。此扩展API通过对象scala.reflect.runtime.Mirror提供。互联网上没有太多关于它的文档,但你可以在StackOverflow上找到一些不错的信息。